我有这样的查询:
select empid,transDateTime
from Trans_Details
where empId='16510'
and transDateTime >='2015-05-07 00:00:00.000'
and transDateTime< ='2015-05-07 23:59:59.000'
我得到这样的输出:
empid transDateTime
--------------- -----------------------
16510 2015-05-07 08:51:56.000
我有相同的查询没有时间,但那个没有返回任何结果:
select empid, transDateTime
from Trans_Details Td
where td.empId='16510'
and Td.transDateTime='2015-05-07'
问题是什么?这次我希望得到相同的结果。
答案 0 :(得分:2)
这是因为transDateTime
属于DATETIME
类型。在WHERE
条款中,2015-05-07
转换为DATETIME
,从而产生2015-05-07 00:00:00.000
。
您可以改用:
WHERE CAST(transDateTime AS DATE) = '20150507'
请注意,您应该使用YYYYMMDD
格式作为日期文字。
另一种避免在WHERE
子句左侧使用函数的方法是:
WHERE
transDateTime >= CAST('20150507' AS DATETIME)
AND transDateTime < DATEADD(DAY, 1, CAST('20150507' AS DATETIME))
答案 1 :(得分:2)
试试这个
select empid,transDateTime from Trans_Details Td where td.empId='16510'
and convert(date,Td.transDateTime)='2015-05-07'
答案 2 :(得分:0)
更好的是你可以双方CAST
WHERE CAST(transDateTime AS DATE) = CAST('2015-05-07' AS DATE)
答案 3 :(得分:0)
第二个查询将无效,因为'2015-05-07'
将转换为日期时间'2015-05-07 00:00:00.000'
,然后进行比较以确保相等。
此处建议使用强加于transDateTime
列的其他解决方案可行,但有一个缺点:您无法使用涉及该列的索引进行查询。因此,如果您在该表中有大量数据(想想数百万行),那么最好坚持使用更加冗长的第一个解决方案,但性能更好(如果您已对该列编制索引)。略微修改正确性:
select empid, transDateTime
from Trans_Details
where empId = '16510'
and transDateTime >= '2015-05-07 00:00:00.000'
and transDateTime < '2015-05-08 00:00:00.000'