如果日期是星期六或星期日,则SQL替换日期值
(对不起,我想不出更好的标题了) 我创建了以下select语句(SQL Server)作为视图如果日期是星期六或星期日,则SQL替换日期值,sql,sql-server,tsql,Sql,Sql Server,Tsql,(对不起,我想不出更好的标题了) 我创建了以下select语句(SQL Server)作为视图 SELECT DISTINCT dbo.ECB.Currency + '-' + CAST(dbo.ECB.Date AS varchar(30)) AS ComboDate, dbo.ECB.Rate AS ECBrate FROM dbo.ECB INNER JOIN dbo.MyTable ON dbo.ECB.Dat
SELECT DISTINCT
dbo.ECB.Currency + '-' +
CAST(dbo.ECB.Date AS varchar(30)) AS ComboDate,
dbo.ECB.Rate AS ECBrate
FROM
dbo.ECB
INNER JOIN
dbo.MyTable ON dbo.ECB.Date = dbo.MyTable.CutoffDate
AND dbo.ECB.Currency = dbo.MyTable.MyCurrency
我的问题:
我注意到的是,我的截止日期栏中有周六和周日日期,但在欧洲央行
日期栏中没有-这意味着我没有这些天的利率
由于我在Excel计算中使用了截止日期
,因此我希望视图将周六和周日的日期值“替换”为周五
我找到了这个工作片段,并根据自己的需要对其进行了修改
SELECT
DISTINCT
CASE WHEN DATEPART(weekday, dbo.CutoffDate) IN (6, 7)
THEN DATEADD(d, -((DATEPART(weekday, dbo.CutoffDate) + 1 + @@DATEFIRST) % 7), dbo.CutoffDate)
ELSE dbo.CutoffDate
END
FROM
MyTable
现在我需要找到一种方法来结合这两种结构,我希望你们能帮我解决这个问题
我想将第二条select语句添加到视图中,但没有成功
谢谢。如果将您的
case
语句移动到join中,它应该可以工作
改变
dbo.MyTable ON dbo.ECB.Date = dbo.MyTable.CutoffDate
到
希望这能有所帮助。看起来您已经找到了一种方法,它试图巧妙地调整日期,而不管会话的
DATEFIRST
设置如何-但是只有在天数为6或7时才调用它,这完全取决于DATEFIRST
设置。简单性建议您为单个DATEFIRST
设置编写代码,如果这是您所需要的,并且您知道它不是一个健壮的解决方案,您会感到很舒服。健壮性建议使整个表达式能够处理任何DATEFIRST
设置。这不是问题。很高兴我能帮忙。你可以在连接中加入很多内容,case
,isnull
,cast
,以及许多其他内容。我现在意识到,如果截止日期是周六或周日,我需要ECB.Date来使用截止日期。例如:如果截止日期=2012-02-17(星期日),则将ECB.日期也设置为2012-02-17,但使用上周五的ECB.日期的ECB.利率。否则,我的ComboDate字符串被设置为USD-2013-02-15,但在我的Excel中,截止日期的计算被设置为USD-2013-02-17,因此我再也没有ECB.利率。@SvenB我不确定我是否理解你的意思。是否仍在尝试使用相同的join语句进行连接,但更改select语句?听起来您想做的是将案例
语句上移到您的select中,只使用ECB.Date
而不是截止日期
。很抱歉延迟-我还有其他事情要处理-当然,您上一次的评论是对的。我现在改了,效果很好。
dbo.Mytable ON dbo.ECB.Date = case when datepart(weekday, dbo.CutoffDate) IN (6,7)
then dateadd(d, -((datepart(weekday, dbo.CutoffDate) + 1 + @@DATEFIRST) % 7), dbo.CutoffDate)
else dbo.CutoffDate
end