SQL,GETDATE在where子句中

时间:2019-07-11 19:02:19

标签: sql sql-server

我正在尝试使用查询作为SQL查询的当天。

我在下面尝试的操作返回0条记录:

select * 
from [TEST].[dbo].LIMIT 
where endOfDay = GETDATE()

select * 
from [TEST].[dbo].LIMIT 
where endOfDay = dateadd(dd, datediff(dd, 0, getdate()), 0)

where endOfDay >= getdate() and endOfDay < getdate() + 1 

示例日期为2019-07-09 00:00:00.0

如果今天的日期没有给定的日期,我可以得到一个日期范围吗?

谢谢您的任何帮助。

5 个答案:

答案 0 :(得分:2)

首先,您需要省略引号,否则'GETDATE()'只是一个字符串。

第二,要按“天”进行匹配,您需要从GETDATE()的结果中剥离时间部分,而可以使用CAST(GETDATE() as DATE)来代替:

select *
from [TEST].[dbo].LIMIT
where endOfDay = CAST(GETDATE() as DATE)

为使此方法最有效,endOfDay列还必须为DATE类型。如果还有其他情况,则还需要将endOfDay投射或转换为DATE

答案 1 :(得分:1)

使用引号使它寻找毫无意义的文字>>> 10 == 10.000000000000001 False >>> 10 == 10.0000000000000001 True 一无所获

您可以使用

'GETDATE()'

Demo

答案 2 :(得分:0)

GETDATE()返回服务器的当前日期和时间。除非您有与之完全匹配的记录,否则使用GETDATE毫无意义。基于endOfDay列名,您看起来不像。

您显示的其他条件, dateadd(dd,datediff(dd,0,getdate()),0)本质上是在剥离时间并返回当前日期的午夜。

select getdate()                                2019-07-11 15:10:09.287
select dateadd(dd,datediff(dd,0,getdate()),0)   2019-07-11 00:00:00.000 

答案 3 :(得分:0)

尝试一下:

select * 
from [TEST].[dbo].LIMIT 
where cast(endOfDay as date) = cast(GETDATE() as date)

SQL Fiddle以查看将与之比较的日期。

答案 4 :(得分:0)

假设您不关心时间,请将EndofDay和Getdate都转换为简单的日期进行比较。

select * from [TEST].[dbo].LIMIT where convert(date,EndOfDay) = convert(date,getdate())