我正在尝试运行一个简单的查询来获取在 11 月创建的所有行:
SELECT COUNT(*)
FROM dbo.profile
WHERE [Created] BETWEEN '2014-11-01 00:00:00.000'
AND '2014-11-30 23:59:59.997';
Run Code Online (Sandbox Code Playgroud)
SMSS 返回:
将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。
我不明白为什么当“创建”设置为日期时间时数据从 varchar 转换为日期时间:
我需要告诉服务器“创建”是日期时间吗?如果没有,为什么我会收到此 varchar 消息?
编辑:数据库中的值为YYYY-MM-DD
. 下面来自@SqlZim 的回复说我需要使用 convert() 来告诉 sql 数据库中的日期格式 - 并用字母 T 替换空格字符:
select count(*)
from dbo.profile
where [created] between convert(datetime,'2014-11-01T00:00:00.000')
and convert(datetime,'2014-11-30T23:59:59.997');`
Run Code Online (Sandbox Code Playgroud)