比较的是什么?GETDATE() - TSQL.



你好,我想知道比较什么或表示什么

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( 没有从 datetimeint 的隐式转换,但存在从 intdatetime 的隐式转换。这意味着表达式几乎与

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)产生datetime1900-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 的行。

最新更新