什么是比较? GETDATE() - SQL

时间:2014-08-20 17:42:11

标签: sql sql-server tsql

您好我想知道比较什么或

的表示
GETDATE() > 1

位于下面的T-SQL代码行中。

WHERE DATEDIFF(dd, CDF_AS_OFDATE, GETDATE()) > 1 )

如果我决定使用100而不是1,会发生什么? (我尝试过,只返回一个较小的结果集)。

4 个答案:

答案 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)没有从datetimeint的隐式转换,但是从int隐式转换为{{1} }}。这意味着表达式几乎与

完全相同
datetime

SQL Server日历的纪元(零点)为where getdate() > convert(datetime,1) ,如果您说1900-01-01 00:00:00.000convert(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的行。