2013-01-24 62 views
4

EDIT: 的解決方案是在參考後的溶液.I粗心忽視DATETIME - > VARCHAR(10)串(日/月/年)迄今爲止SQL服務器

`語法CONVERT :

CONVERT (data_type [ (length) ] , expression [ , style ])` 

我知道this

的SQL Server(2005年,2000年,7.0)沒有服用任何一種靈活的,甚至不靈活,方式以字符串格式任意結構化的日期時間並將其轉換爲日期時間數據類型。

所以我正在尋找解決方案,只解決這種特定的字符串格式。

比方說,我在SQL Server中使用字段的表:inputDatedatetime格式

下面的代碼工作沒有轉換/施放

SELECT inputDate 
FROM some_table 
WHERE inputDate > '01/24/2013' 

但它不會對

SELECT inputDate 
FROM some_table 
WHERE inputDate > '24/01/2013' 
工作

投擲The conversion of a varchar data type to a datetime data type resulted in an out-of-range value

然後我試圖

SELECT inputDate 
FROM some_table 
WHERE inputDate > CONVERT(VARCHAR(10), '24/01/2013', 103) 

拋出了同樣的錯誤

有沒有辦法在DD/MM/YYYY 字符串轉換爲可識別的日期時間格式在SQL SERVER?或者唯一的方法,正確的方法是在其他地方進行健康化?

+0

問題是你需要決定一種格式或其他。您如何期待SQL Server知道「07/08/2012」是7月8日還是8月7日? –

+0

@AaronBertrand通過在轉換函數中使用第三個agrument,我想。 JW。解決了這個問題。 – Larry

+1

我指的是你引用的前一篇文章,他們似乎希望SQL Server知道是否自動使用101或103。 –

回答

9

你嘗試使用DATETIME代替VARCHAR(10)

WHERE inputDate > CONVERT(DATETIME, '24/01/2013', 103) 
+1

禾,它就像一個魅力。謝謝! – Larry

+0

不客氣':D' –

+0

P.S.解決方法是在參考文章的解決方案。我不小心忽略DATETIME - > Varchar(10) – Larry

-1

使用ISO 8601日期格式YYYY-MM-DDT00:00:00。將隱式轉換爲日期時間在任何場所

+0

謝謝,這意味着我必須在預處理中將我的sql日期字符串重新格式化爲yyyy-mm-dd? – Larry

+1

不,這不是真的!試試'SET LANGUAGE FRENCH; SELECT CONVERT(DATETIME,'2012-12-31');' –

+1

檢查此MSDN文章:http://msdn.microsoft.com/en-us/library/ms187819.aspx。 (搜索ISO 8601) – cha

-2

儘量增加你的VARCHAR(10)到VARCHAR(14)的長度,如:

select inputDate from Table 
where inputDate > convert(varchar(14), '24/01/2013', 103) 
+0

不,它不在我的sql server studio上。我試過14,20 – Larry

0

嘗試使用信息在這篇文章:ISO 8601

我成功做到以下幾點:

select convert(datetime,convert(char(23),'20140125' ,127),103) as MyDate 

得到這個: 2014年1月25日00:00:00.000