【问题标题】:Is this sql where statement correct?这个 sql where 语句正确吗?
【发布时间】:2011-02-25 01:30:12
【问题描述】:

我今天的日期有 10 行,但我的基于日期的选择语句似乎不起作用....

SELECT Id,WirelessId,RegNo,DriverName1,MobileNo1,DriverName2,MobileNo1 from
 DailySchedule where IsDeleted=0 and CreatedDate='2010-05-28'

任何建议...

【问题讨论】:

  • 首先:“不工作”是什么意思?你没有结果吗?您的 CreatedDate 可能有时间组件。在这种情况下,您只查询恰好在午夜发生的那些行。
  • CreatedDate 列是什么类型?
  • @spender 和 @joachim 它是一个日期时间字段..
  • 检查发布的答案是否适合您

标签: sql sql-server-2005 datetime select where-clause


【解决方案1】:

这应该也可以

select Id, 
  WirelessId,
  RegNo,
  DriverName1,
  MobileNo1,
  DriverName2,
  MobileNo1 
from DailySchedule 
where IsDeleted=0 
  and CONVERT(varchar,CreatedDate,101) ='05/28/2010' 

【讨论】:

    【解决方案2】:

    仅当分配给他们的日期是今天午夜时。这样做可能会更好:

    CreatedDate BETWEEN '2010-05-28 00:00' AND '2010-05-29 00:00'
    

    【讨论】:

    • 一种更安全的格式是在日期和时间之间使用“T”,而不是空格字符。 (就 SQL 服务器而言更安全,无论应用什么语言环境/日期时间设置,以及在何处应用,转换总是正确的)
    • 你会错过最后一分钟的条目,看看blogs.lessthandot.com/index.php/DataMgmt/DataDesign/…
    • 这也不是固定的,因为现在您将在午夜获得条目。更好的方法是 CreatedDate >='20100528' 和 CreatedDate
    【解决方案3】:

    如果你想要 5 月 28 日的所有参赛作品,我会这样做

    and CreatedDate >='20100528'
    and CreatedDate < '20100529'
    

    注意安全的 ISO 格式 (YYYYMMDD) 没有破折号

    也看看How Does Between Work With Dates In SQL Server?,看看为什么之间不能给你所有你想要的结果

    【讨论】:

      【解决方案4】:
      SELECT Id,WirelessId,RegNo,DriverName1,MobileNo1,DriverName2,MobileNo1 from
       DailySchedule where IsDeleted=0 and date_format(CreatedDate, "%Y-%m-%d")='2010-05-28'
      

      【讨论】:

        【解决方案5】:

        没有足够的信息继续下去,但我怀疑您的日期有时间部分,因此与字符串不完全匹配。

        尝试使用:

        datediff(day, CreatedDate, '28-may-2010')) = 0
        

        【讨论】:

        • 那是非 SARGable,优化器需要做一个扫描
        【解决方案6】:

        我会检查 CreatedDate 列的类型,并确保您传递的字符串已正确转换为日期。

        当您说“有”10 行时,这是通过视觉确认还是通过在控制台中执行的查询来确认?

        【讨论】:

        • 在没有 where 子句的 consule 中执行的查询
        【解决方案7】:

        假设 CreatedDate 是日期时间或日期,我看不出 where 子句的语法有什么问题。也许这些列的 IsDeleted 字段实际上是 NULL? (或非零,无论如何。)

        编辑:Dave 所说的,或 DATE(CreatedDate) = '2010-05-28'

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-08-29
          • 2014-06-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-08
          • 1970-01-01
          相关资源
          最近更新 更多