你好,我想知道比较什么或表示什么
GETDATE() > 1
位于下面的 T-SQL 代码行中。
WHERE DATEDIFF(dd, CDF_AS_OFDATE, GETDATE()) > 1 )
如果我决定使用 100 而不是 1,会发生什么?(我试过了,只是返回了一个较小的结果集(。
它比较CDF_AS_OFDATE
和当前日期之间的天数差异,以查看它是否超过 1 天。如果将其更改为相差超过 100 天的结果集,则很可能是一个小得多的结果集。
(您可以通过注意到它DATEDIFF()
与 dd
参数一起使用来确定它以天为单位,该参数指示您希望以天为单位的差异。
它会检查两个日期之间是否有超过 1 天的差异(当时与现在(
SQL Server DATEDIFF(( 函数
DATEDIFF(( 函数返回两个日期之间的时间。语法日期差异(日期部分,开始日期,结束日期(
其中开始日期和结束日期是有效的日期表达式,日期部分可以是以下之一:
day dd, d
例
现在我们要获取两个日期之间的天数。
我们使用以下 SELECT 语句:选择日期差异(天,'2008-06-05','2008-08-05'( 作为差异日期
结果:差异日期61
答案在WHERE
子句的DATEDIFF
部分。
它实际上只计算那些值CDF_AS_OFDATE
与当前系统日期至少相差 1 天的行。
哪里开始...
在您的第一个示例中...
where getdate() > 1
第一个getdate()
返回当前日期和时间作为datetime
值。如果您阅读文档,您会发现 (1( 没有从 datetime
到 int
的隐式转换,但存在从 int
到 datetime
的隐式转换。这意味着表达式几乎与
where getdate() > convert(datetime,1)
SQL Server日历的纪元(零点(是 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
如前所述,
getdate()
为您提供当前日期和时间。datediff(( 返回请求的时间单位中两个
datetime
值之间的增量。如果你想对事情迂腐(我也是(,根据请求的单位,结果值不一定是正确的(取决于你对"正确"的定义(:你得到的是两个datetime
值之间的单位边界计数。因此,即使下面表达式中的两个datetime
值正好相隔一秒,-
datediff(dd,'Dec 31, 2013 23:59:59','Jan 1, 2014 00:00:00')
返回1
表示增量为 1 天,而 -
datediff(year,'Dec 31, 2013 23:59:59','Jan 1, 2014, 00:00:00') likewise returns
1' 表示 1 年的增量。
-
因此,您的 where
子句将结果集限制为从日期到当前日期/时间的增量(以天为单位(大于 1 的行。