2015-05-09 100 views
1

我兩個日期2014年1月12日和31/12/2014但nvarchar的轉換爲nvarchar日期和獲取兩個日期

是我的查詢權我的SQL數據類型之間收集數據之間的數據?

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. 

任何一個可以解決這個問題...

+1

[不良習慣踢:選擇錯誤的數據類型](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/12/bad-habits-to-kick-using-the-wrong- data-type.aspx) - 你應該總是使用最合適的數據類型 - 畢竟這就是他們的存在!解決這個問題**首先** - 使用適當的數據時間的日期 - 如'DATE'或'DATETIME2(n)' –

回答

2

,因爲我知道你必須單獨與日期的不同部分「 - 」不使用「/」格式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) 
+0

通過轉換日期我得到的結果... –

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) 
+0

這不顯示結果 –

0

如果你的約會對象類型是nvarchar的你爲什麼不嘗試這樣的:

SELECT * FROM customer 
WHERE date >= '01/12/2014' 
AND date <= '31/12/2014' 
0

難道我們真的需要轉換?

SELECT * FROM DBO.CUSTOMER 
WHERE CAST([date] AS DATE) >= '01/12/2014' AND 
CAST([date] AS DATE) <= '31/12/2014' 
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