如果日期是星期六或星期日,则SQL替换日期值

时间:2013-02-20 14:09:06

标签: 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.Date = dbo.MyTable.CutoffDate 
                AND dbo.ECB.Currency = dbo.MyTable.MyCurrency

我的问题:

我注意到我在 CutoffDate 列中有星期六星期日日期,但ECB没有日期栏 - 意思是那些日子没有价格。

由于我在Excel计算中使用CutoffDate,我希望视图能够“替换”周六和周日的日期值与星期五。

我找到了这个工作片段并根据我的需要进行了修改。

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语句,但未能这样做。

谢谢。

1 个答案:

答案 0 :(得分:2)

如果您将case语句移动到联接中,它应该可以正常工作。

更改

dbo.MyTable ON dbo.ECB.Date = dbo.MyTable.CutoffDate

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

希望这有帮助。