use*_*222 6 sql sql-server-2008
我有一张名为Users:
CreateTime UserName
========================================
2012-08-30 14:23:12:000 zhang
2012-08-30 15:11:13:000 li
2012-08-30 16:32:22:000 wang
2012-08-31 11:23:12:000 steven
2012-08-31 12:05:14:000 zhao
2012-08-31 08:23:12:000 ddd
Run Code Online (Sandbox Code Playgroud)
和查询:
select UserName
from Users
where CreateTime >= '2012-08-30' and CreateTime <= '2012-08-31'
Run Code Online (Sandbox Code Playgroud)
因此,结果应该是6行,但事实并非如此.
怎么解决这个?
使用SQL Server Convert功能CONVERT(VARCHAR(23), CreateTime, 121)?
小智 16
它没有显示6行,因为2012-08-31解释器收到了这些行2012-08-31 00:00:00 AM.由于您希望查看包含31日的数据,因此您可以明确提及时间或查询第二天的日期.
示例使用下一天的日期
SELECT UserName
FROM Users
WHERE CreateTime >= '2012-08-30' AND CreateTime < '2012-09-01'
Run Code Online (Sandbox Code Playgroud)
明确提及时间的例子
SELECT UserName
FROM Users
WHERE CreateTime >= '2012-08-30 00:00:00' AND CreateTime < '2012-09-31 23:59:59'
Run Code Online (Sandbox Code Playgroud)
him*_*056 13
所有你需要的是CAST你CreateTime从Datetime到Date这样的:
SELECT UserName FROM Users
WHERE CAST(CreateTime as date)>='2012-08-30'
AND CAST(CreateTime as date)<= '2012-08-31';
Run Code Online (Sandbox Code Playgroud)
您还可以使用BETWEEN的,而不是<=和>=这样的:
SELECT UserName FROM Users
WHERE CAST(CreateTime as date) BETWEEN
'2012-08-30' AND '2012-08-31';
Run Code Online (Sandbox Code Playgroud)