我正在尝试运行一个简单的查询来获取在11月创建的所有行:
SELECT COUNT(*)
FROM dbo.profile
WHERE [Created] BETWEEN '2014-11-01 00:00:00.000'
AND '2014-11-30 23:59:59.997';
SMSS返回:
从varchar数据类型到datetime数据类型的转换导致值超出范围。
我不明白为什么将“ Created”设置为datetime时将数据从varchar转换为datetime:
我需要告诉服务器“创建”是日期时间吗?如果没有,为什么我会收到此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');`
CONVERT(DATE, '20141201')
如果您需要明确地覆盖其他所有条件,我可能会这样做。再说一次,如果基础列是日期/时间类型,那么这实际上不是必需的。您是否说WHERE Active = CONVERT(BIT, 1)
避免WHERE Active = 1
被解释为INT
?