将nvarchar转换为date并在两个日期之间获取数据

时间:2015-05-09 13:26:28

标签: sql sql-server sql-server-2008

我在两个日期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.

任何人都可以解决这个问题...

5 个答案:

答案 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