2016-02-26 99 views
0

我在這裏做錯了什麼?我查看了其他帖子,但我得到的結果不同於其他人。將varchar YYYYMMDD轉換爲datetime以與GETDATE()進行比較

試圖爲varchar YYYYMMDD轉換爲datetime,我不斷收到: 消息8115,級別16,狀態2,行2 算術溢出錯誤將表達式轉換爲數據類型日期時間。

嘗試:

CONVERT(DATETIME, EXPDATE) 
CONVERT(DATETIME, EXPDATE, 102) 
(CONVERT(DATETIME, CAST(EXPDATE AS CHAR(8)), 112)) 
CONVERT(DATETIME, CAST(expdate AS VARCHAR(8))) 

上午我笨拙的東西在這裏很明顯?

+0

什麼是日期值? – FLICKER

+0

爲什麼不轉換其他方式來做比較? GETDATE()可以給你YYYY,MM和DD,將它們轉換爲varchar,連接它們並進行比較。 – BoltBait

回答

2

你顯然有一個不是有效日期的值。

在SQL Server 2012+,我建議TRY_CONVERT()

TRY_CONVERT(DATETIME, EXPDATE) 

然後,看看那是NULL,看看數據問題可能的值。

在早期版本中,你應該能夠使用isdate()

(CASE WHEN ISDATE(EXPDATE) = 1 THEN CAST(EXPDATE AS DATE) END) 
0

我有我使用一個表中的類似格式的日期字段(DateKey)。我用它的語法將它轉換爲DATETIME:

SELECT CAST(CAST(DateKey AS VARCHAR(10)) AS DATETIME) FROM tblDate 

這個工作適合你嗎?

0

優秀。 Gordon和chancrovsky,你幫我清除了格式不正確的值。我用了一個版本的你貼什麼,這個工作

(CASE WHEN ISDATE(EXPDATE)= 1,則CAST(EXPDATE AS DATE)ELSE NULL END)作爲EXPDATE

太謝謝你了!