您好我想知道比较什么或
的表示GETDATE() > 1
位于下面的T-SQL代码行中。
WHERE DATEDIFF(dd, CDF_AS_OFDATE, GETDATE()) > 1 )
如果我决定使用100而不是1,会发生什么? (我尝试过,只返回一个较小的结果集)。
答案 0 :(得分:2)
比较CDF_AS_OFDATE
与当前日期之间的天数差异,看它是否超过1天。如果将其更改为差异超过100天的那些,则很可能是一个小得多的结果集。
(您可以通过注意DATEDIFF()
使用dd
参数来确定它是否在几天之内,这表示您希望天数存在差异。)
答案 1 :(得分:1)
检查两个日期之间是否存在超过1天的差异(然后是现在)
SQL Server DATEDIFF() Function
DATEDIFF()函数返回两个日期之间的时间。 句法 DATEDIFF(日期部分,开始日期,结束日期)
其中startdate和enddate是有效的日期表达式,而datepart可以是以下之一:
day dd, d
实施例
现在我们想要获得两个日期之间的天数。
我们使用以下SELECT语句: 选择DATEDIFF(白天,' 2008-06-05',' 2008-08-05')AS DiffDate
结果: DiffDate 61
答案 2 :(得分:0)
答案在DATEDIFF
子句的WHERE
部分。
它实际上仅评估CDF_AS_OFDATE
值至少1天与当前系统日期不同的那些行。
答案 3 :(得分:0)
从哪里开始...
在您的第一个例子中......
where getdate() > 1
首先getdate()
将当前日期和时间作为datetime
值返回。如果您read the documentation,您会发现(1)没有从datetime
到int
的隐式转换,但是从int
隐式转换为{{1} }}。这意味着表达式几乎与
datetime
SQL Server日历的纪元(零点)为where getdate() > convert(datetime,1)
,如果您说1900-01-01 00:00:00.000
或convert(datetime,0)
,则会获得此纪录。将convert(datetime,'')
值转换为int
值时,将使用整数值来指示自纪元以来天数的偏移量。转化是通过将多天添加到纪元以获得结果datetime
值来执行的:datetime
因此产生convert(datetime,1)
值datetime
,因此您的表达式相当于
1900-01-02 00:00:00.000
除非你严重破坏你的系统时钟,否则哪个表达式将永远为真。
在您的第二个例子中......
where getdate() > '1900-01-02 00:00:00.000'
where datediff( dd , CDF_AS_OF_DATE , getdate() ) > 1
如前所述,为您提供当前日期和时间。
datediff()返回请求的时间单位中两个getdate()
值之间的差值。如果你想对事物(我做)迂腐,根据所要求的单位,结果值不一定正确(取决于你对“正确”的定义):你得到的是两者之间的单位边界的数量datetime
值。因此,即使只用一秒钟分隔下面表达式中的两个datetime
值,
datetime
返回datediff(dd,'Dec 31, 2013 23:59:59','Jan 1, 2014 00:00:00')
,表示1天的差值,而1
1`表示1年的差值。因此,您的datediff(year,'Dec 31, 2013 23:59:59','Jan 1, 2014, 00:00:00') likewise returns
子句将结果集限制为从截止日期到当前日期/时间的增量(以天为单位)大于1的行。