【发布时间】:2013-02-20 14:09:06
【问题描述】:
(抱歉,我想不出更好的标题)
我创建了以下选择语句 (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.Date = dbo.MyTable.CutoffDate
AND dbo.ECB.Currency = dbo.MyTable.MyCurrency
我的问题:
我注意到我的 CutoffDate 列中有 Saturday 和 Sunday 日期,但 ECB 日期列中没有- 意思是我没有那些日子的费率。
由于我在 Excel 计算中使用 CutoffDate,因此我希望视图将周六和周日的日期值“替换”为周五。
我发现了这个有效的 sn-p 并根据我的需要对其进行了修改。
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 语句添加到我的视图中,但没有这样做。
谢谢。
【问题讨论】:
-
看起来你有一种方法试图巧妙地调整日期,而不管会话的
DATEFIRST设置如何 - 但只有当天数为 6 或7,这完全取决于DATEFIRST设置。 Simplicity 建议您为单个DATEFIRST设置编码,如果这就是您所需要的,并且您知道这不是一个强大的解决方案。稳健性建议使整个表达式能够处理任何DATEFIRST设置。
标签: sql sql-server tsql