我的表中有很多列,其中一列(ScheduleDate)是日期类型的列,格式为2018-10-31(YYYY-MM-DD)。当我尝试查询表过滤以仅显示未来两天的条目时,它没有结果返回
我的代码
SELECT
ScheduleDate
, Customer
, Status
FROM SomeTable_1
WHERE Status = 'Pending'
AND ScheduleDate = CAST(GETDATE() + 2 AS DATE)
我也尝试过这样的格式化:
AND ScheduleDate = CONVERT(DATE, GETDATE() + 2)
我确定它是语法错误或某些错误,但是SQL Server只是返回带有标头的空结果...
原来我的高级开发人员正在对该表进行更改,并删除了该表中的大多数记录,我们只有下个月的记录。所有人都对,因为记录不存在是正确的,我只是没有刷新SELECT * FROM SOMETABLE
结果。当我问他为什么我没有得到结果时,我不确定他为什么不提到他这样做。也许他在恶作剧。感谢您的所有帮助,我现在要去装在笨拙的帽子里,躲在角落里。
答案 0 :(得分:2)
如果select getdate()
返回正确的值(即您的系统时钟正确),那么您要么没有该日期的行,要么谓词WHERE [Status] = 'Pending'
的任何结果都不为TRUE行。
使用给定的细节无法重现。
declare @SomeTable_1 table (ScheduleDate date, Customer int, [Status] varchar(16))
insert into @SomeTable_1
values
('20181104',1,'Pending')
SELECT
ScheduleDate
, Customer
, [Status]
FROM @SomeTable_1
WHERE [Status] = 'Pending'
AND ScheduleDate = CAST(GETDATE() + 2 AS DATE)
对于ScheduleDate
是否是varchar
并将其转换为相等运算符的date
也不重要。
declare @SomeTable_1 table (ScheduleDate varchar(16), Customer int, [Status] varchar(16))
insert into @SomeTable_1
values
('2018-11-04',1,'Pending')
SELECT
ScheduleDate
, Customer
, [Status]
FROM @SomeTable_1
WHERE [Status] = 'Pending'
AND ScheduleDate = CAST(GETDATE() + 2 AS DATE)
但是,这很重要,如果它是datetime
并且小时/分钟/秒不是00:00:00
declare @SomeTable_1 table (ScheduleDate datetime, Customer int, [Status] varchar(16))
insert into @SomeTable_1
values
('20181104 13:24:00',1,'Pending')
SELECT
ScheduleDate
, Customer
, [Status]
FROM @SomeTable_1
WHERE [Status] = 'Pending'
AND ScheduleDate = CAST(GETDATE() + 2 AS DATE)
值得注意的是,您实际上应该使用dateadd
而不是加法运算符。