为什么getdate返回1 \ 1 \ 1900
问题描述:
我有下面的代码,如果星期六或星期天将日期移动到星期五,但为什么它返回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
答
尝试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;
答
您正在尝试合并两个不同的返回值。
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]
感谢@McNets但仍然不起作用 – Joe
你需要一个日期时间或星期几? – McNets