这个sql语句是否正确?

时间:2010-05-28 09:56:47

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

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

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

任何建议......

7 个答案:

答案 0 :(得分:7)

只有分配给他们的日期是今天午夜。这可能更好:

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

答案 1 :(得分:1)

如果您想要5月28日的所有参赛作品,我会

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

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

另请查看How Does Between Work With Dates In SQL Server?,了解为什么之间无法提供您想要的所有结果

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

当你说'有'10行时,是在视觉上确认还是在控制台中执行查询?

答案 4 :(得分:0)

没有足够的信息继续,但我怀疑你的日期有一个时间组件,所以不完全匹配字符串。

尝试使用:

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

答案 5 :(得分:0)

SELECT Id,WirelessId,RegNo,DriverName1,MobileNo1,DriverName2,MobileNo1 from
 DailySchedule where IsDeleted=0 and date_format(CreatedDate, "%Y-%m-%d")='2010-05-28'

答案 6 :(得分:0)

这也应该有用

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