2017-04-01 144 views
0

我有下面的代码,如果星期六或星期天将日期移动到星期五,但为什么它返回1900-01-06 00:00:00.000而不是2017-03-31 13:18:12.300我试过了getdate() - 1工作正常,这是星期五效果很好。如果星期六或星期天我为什么不工作?为什么getdate返回1 1 1900

set datefirst 7 --Sunday 

declare @ACUTBY datetime = getdate() 

select 
case datepart(WEEKDAY, @ACUTBY) 
    when 1 then 5 
    when 7 then 5 
    else @ACUTBY 
end as [A-CUT BY] 

上面的代码1900-01-06 00:00:00.000

---- GETDATE() - 1 ------

set datefirst 7 --Sunday 

declare @ACUTBY datetime = getdate()-1 

select 
case datepart(WEEKDAY, @ACUTBY) 
    when 1 then 2 
    when 7 then 5 
    else @ACUTBY 
end as [A-CUT BY] 

上面的代码返回2017-03-31 13:18:12.300

回答

1

尝试select Cast(5 as DateTime)

您正在混合的数据类型,例如整数5和日期时间@ACUTBY,并且case的结果必须是单个数据类型。因此数字被转换为DateTime。由于DateTime的基准日期为1900年1月1日,因此在1月6日添加5结果。

你可能想是这样的:

declare @Samples as Table (Sample Date); 
insert into @Samples (Sample) values 
    ('20170402'), ('20170403'), ('20170404'), 
    ('20170405'), ('20170406'), ('20170407'), ('20170408'); 

select Sample, DatePart(dw, Sample) as DoW, 
    case DatePart(dw, Sample) 
    when 1 then DateAdd(day, -2, Sample) 
    when 7 then DateAdd(day, -1, Sample) 
    else Sample end as WeekDay 
    from @Samples; 
0

您正在尝试合并两个不同的返回值。

select 
case when datepart(WEEKDAY, @ACUTBY) = 1 then 2 
    when datepart(WEEKDAY, @ACUTBY) = 7 then 5 
    else datepart(WEEKDAY, @ACUTBY) 
end as [A-CUT BY] 
+0

感谢@McNets但仍然不起作用 – Joe

+0

你需要一个日期时间或星期几? – McNets