【问题标题】:Why date comparison in sql is not working. Please help为什么 sql 中的日期比较不起作用。请帮忙
【发布时间】:2011-02-10 23:15:10
【问题描述】:

我正在尝试从表中获取一些记录,但是当我使用 OR 而不是 AND 时,它返回的记录很少,但在其他情况下不会。 准确给出的日期列于表中。我在做什么错?

select newsid,title,detail,hotnews 
from view_newsmaster
where  datefrom>=CONVERT(datetime, '4-22-2010',111) 
  AND dateto<=CONVERT(datetime, '4-22-2010',111)

【问题讨论】:

    标签: sql-server datetime types sql


    【解决方案1】:

    当您使用AND 时,您将获得两个日期之间的日期(在本例中为同一日期)。

    当您使用OR 时,您会得到比第一个大的日期,比第二个小的日期。

    它们是两种不同的条件,因此您的结果会有所不同。

    你想达到什么目的?这个查询应该返回什么?

    【讨论】:

      【解决方案2】:

      我认为你的“从”和“到”方向错误......

      select newsid,title,detail,hotnews from view_newsmaster 
       where  dateto>=CONVERT(datetime, '4-22-2010',111) AND datefrom<=CONVERT(datetime, '4-22-2010',111) 
      

      【讨论】:

        【解决方案3】:

        如果没有您表中的任何示例性数据,很难说。

        我会检查有多少记录具有 datefrom大于 dateto 值——这对我来说看起来很奇怪——这可能是使用 AND 查询的原因不返回任何东西。

        尝试将dateto替换CONVERT(datetime, '4-23-2010',111) - 请注意CONVERT(datetime, '4-22-2010',111) 是4 月22 日午夜(一天的开始),而不是一天的结束。

        【讨论】:

          【解决方案4】:

          这是因为日期意味着时间 00:00:00,不指定时间将排除那些落在一天内但技术上在范围内的记录。

          指定时间:

          where  datefrom>=CONVERT(datetime, '4-22-2010 00:00:00',111) 
            AND dateto<=CONVERT(datetime, '4-22-2010 23:59:59',111)
          

          或者更好的是,使用 BETWEEN 运算符:

          where  fDateField BETWEEN '4-22-2010' AND '4-23-2010'
          

          注意第二个日期是date+1,即第二天,基本上是日期23:59:59

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-09-11
            • 2017-11-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多