SELECT DATEADD(DAY, CASE DATENAME(WEEKDAY, GETDATE()) WHEN 'Sunday' THEN -2 WHEN 'Monday' THEN -3 ELSE -1 END, DATEDIFF(DAY, 0, GETDATE()))
我更喜欢将其
DATENAME用于类似这样的事情,
DATEPART因为它消除了对设置的需要,
DATEFIRST并确保本地计算机上时间/日期设置的变化不会影响结果。最后
DATEDIFF(DAY,0, GETDATE())将消除时间部分,
GETDATE()消除了需要转换为varchar的过程(速度要慢得多)。
编辑(将近2年)
这个答案很早就在我的职业生涯中,每次都被投票否决让我很烦,因为我不再同意使用DATENAME的想法。
更为有效的解决方案是:
SELECT DATEADD(DAY, CASE (DATEPART(WEEKDAY, GETDATE()) + @@DATEFIRST) % 7 WHEN 1 THEN -2 WHEN 2 THEN -3 ELSE -1 END, DATEDIFF(DAY, 0, GETDATE()));
这将适用于所有语言和DATEFIRST设置。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)