我在两个日期01/12/2014和2014年12月31日之间收集数据,但我的sql数据类型为nvarchar
是我的查询对吗?
SELECT * from customer where date >= convert(datetime, '01/12/2014', 105)
AND date <= convert(datetime, '31/12/2014', 105)
结果
Msg 242, Level 16, State 3, Line 1
The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value.
任何人都可以解决这个问题...
答案 0 :(得分:3)
据我所知,你必须将DATE的不同部分与&#34; - &#34;分开。不是&#34; /&#34;格式105.这是一个例子:
SELECT convert(datetime, '23-10-2016', 105) -- dd-mm-yyyy
因此您必须将代码重写为:
SELECT * from customer where date >= convert(datetime, '01-12-2014', 105)
AND date <= convert(datetime, '31-12-2014', 105)
答案 1 :(得分:1)
您的字符串所在的格式,'dd/mm/yyyy'
是103,而不是105('dd-mm-yyyy'
)。所以,只需使用正确的格式:
SELECT *
FROM customer
WHERE [date] >= CONVERT(datetime, '01/12/2014', 103)
AND [date] <= CONVERT(datetime, '31/12/2014', 103)
答案 2 :(得分:0)
如果您的日期类型为nvarchar,为什么不尝试这样:
SELECT * FROM customer
WHERE date >= '01/12/2014'
AND date <= '31/12/2014'
答案 3 :(得分:0)
我们真的需要转换吗?
SELECT * FROM DBO.CUSTOMER
WHERE CAST([date] AS DATE) >= '01/12/2014' AND
CAST([date] AS DATE) <= '31/12/2014'
答案 4 :(得分:0)
我建议你用这个:
(我认为转换为varchar
更有意义)
SELECT *
FROM customer
WHERE CONVERT(varchar, [date], 103) BETWEEN '01/12/2014' AND '31/12/2014'
日期和时间样式; 103
适用于British/French
标准,带有世纪(yyyy
),例如dd/mm/yyyy
。