【问题标题】:SQL select where startdate is today's dateSQL select where startdate 是今天的日期
【发布时间】:2015-02-07 09:58:01
【问题描述】:

我正在尝试编写一个查询,其中子句是当员工的开始日期是今天的日期时。

select * from tbl_employees
where Startdate = getdate()

问题是 Startdate 是 '2014-12-09 00:00:00.000' 并且函数getdate 会返回日期和时间,例如'2014-12-09 08:25:16.013'

如何编写只考虑日期的查询?

【问题讨论】:

标签: sql sql-server sql-server-2008 tsql datetime


【解决方案1】:

您只需要日期部分。简单的方法是:

select *
from tbl_employees
where cast(Startdate as date) = cast(getdate() as date);

但是,如果要使用索引,最好不要在函数调用中包含该列。所以,这样更好:

where (StartDate >= cast(getdate() as date) and StartDate < cast(getdate() + 1 as date))

【讨论】:

    【解决方案2】:
    select * from tbl_employees 
    where CONVERT(VARCHAR(10),Startdate,110) = CONVERT(VARCHAR(10),GETDATE(),110)
    

    【讨论】:

      【解决方案3】:

      您可以使用仅比较 DATE 部分而不是时间..类似的东西

      IF CAST(DateField1 AS DATE) = CAST(DateField2 AS DATE)
      

      CONVERT(VARCHAR(10), GETDATE(), 112)
      

      【讨论】:

        【解决方案4】:
        SELECT CONVERT (date, SYSDATETIME())
            ,CONVERT (date, SYSDATETIMEOFFSET())
            ,CONVERT (date, SYSUTCDATETIME())
            ,CONVERT (date, CURRENT_TIMESTAMP)
            ,CONVERT (date, GETDATE())
            ,CONVERT (date, GETUTCDATE());
        
        /* Returned 
        SYSDATETIME()      2007-05-03
        SYSDATETIMEOFFSET()2007-05-03
        SYSUTCDATETIME()   2007-05-04
        CURRENT_TIMESTAMP  2007-05-03
        GETDATE()          2007-05-03
        GETUTCDATE()       2007-05-04
        */
        

        发件人:http://msdn.microsoft.com/en-us/library/ms188751.aspx

        所以使用其中任何一个都会给你日期

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-14
          • 1970-01-01
          • 2023-01-19
          • 2012-08-20
          • 2019-01-22
          相关资源
          最近更新 更多