【问题标题】:How to select rows for a specific date, ignoring time in SQL Server如何选择特定日期的行,忽略 SQL Server 中的时间
【发布时间】:2010-11-11 15:24:34
【问题描述】:

给定一个包含日期时间列的表,如何查询日期与我指定的值匹配但忽略时间部分的行?

例如,select * from sales where salesDate = '11/11/2010'

对于这个查询,我们不关心时间。其他查询需要时间组件,因此我们不能只存储日期组件。

谢谢!

【问题讨论】:

    标签: sql sql-server-2005


    【解决方案1】:

    比较时可以去掉时间分量:

    SELECT * 
    FROM sales 
    WHERE CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, salesDate))) = '11/11/2010'
    

    另一种方法是更改​​选择以覆盖日期开始和结束之间的所有时间:

    SELECT * 
    FROM sales 
    -- WHERE salesDate BETWEEN '11/11/2010 00:00:00.00' AND '11/11/2010 23:59:59.999'
    WHERE salesDate BETWEEN '2020-05-18T00:00:00.00' AND '2020-05-18T23:59:59.999'
    

    【讨论】:

    • 我没有得到你的解决方案的结果
    • 很抱歉听到这个消息。您确定您的日期范围是正确的,并且数据库中存在与它们匹配的数据吗?
    • 可以:SELECT * FROM sales WHERE CAST(salesDate as DATE) = '11/11/2010'
    【解决方案2】:

    我知道这个问题已经有一段时间了,但我只是在寻找相同的答案,发现这似乎是最简单的解决方案:

    select * from sales where datediff(dd, salesDate, '20101111') = 0
    

    我实际上更多地使用它来查找最后一两天内的东西,所以我的版本如下所示:

    select * from sales where datediff(dd, salesDate, getdate()) = 0
    

    通过将今天的 0 更改为 1,我得到昨天的交易,2 是前一天,依此类推。如果您想要上周的所有内容,只需将等于更改为小于或等于:

    select * from sales where datediff(dd, salesDate, getdate()) <= 7
    

    【讨论】:

    • 不错的解决方案。如果您将日期格式更改为“yyyy-MM-dd”,则确认可以使用 h2 db。
    【解决方案3】:
    select * from sales where salesDate between '11/11/2010' and '12/11/2010' --if using dd/mm/yyyy
    

    更正确的做法:

    DECLARE @myDate datetime
    SET @myDate = '11/11/2010'
    select * from sales where salesDate>=@myDate and salesDate<dateadd(dd,1,@myDate)
    

    如果只指定日期,则表示整个午夜。如果您想确保间隔不重叠,请使用一对&gt;=&lt; 进行切换

    你可以在一个语句中做到这一点,但只是该值被使用了两次。

    【讨论】:

      【解决方案4】:

      我知道这是一个老话题,但我设法以这种简单的方式做到了:

      select count(*) from `tablename`
      where date(`datecolumn`) = '2021-02-17';
      

      【讨论】:

        【解决方案5】:

        试试这个:

        SELECT * FROM sales WHERE CAST(salesDate AS date) = '2010-10-10'
        

        【讨论】:

        • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
        【解决方案6】:

        类似这样的:

        select 
          * 
        from sales 
        where salesDate >= '11/11/2010' 
          AND salesDate < (Convert(datetime, '11/11/2010') + 1)
        

        【讨论】:

          【解决方案7】:
          select 
            * 
          from sales 
          where 
            dateadd(dd, datediff(dd, 0, salesDate), 0) = '11/11/2010'
          

          【讨论】:

            【解决方案8】:

            试试这个:

            true
            select cast(salesDate as date) [date] from sales where salesDate = '2010/11/11'
            false
            select cast(salesDate as date) [date] from sales where salesDate = '11/11/2010'
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2016-03-15
              • 1970-01-01
              • 1970-01-01
              • 2010-12-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多