2017-05-23 88 views
0

我試過了我能找到的所有東西(CAST,CONVERT,在導入時轉換,檢查默認語言設置),但我找不到工作解決方案將我的VARCHAR值轉換爲DATETIME。我想將此字段的轉換插入一個新表,其中該列設置爲DATETIME轉換不適用於VARCHAR到DATETIME

當我運行:

SELECT CONVERT(VARCHAR, [first air date], 121) 
FROM mytable 

結果返回精細,無差錯。然而,當我運行:

INSERT INTO newtable 
    SELECT ID, column1, column2, 
      CONVERT(VARCHAR, [first air date], 121) 
    FROM mytable 

我得到這個錯誤:

Msg 242, Level 16, State 3, Line 1
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value. The statement has been terminated.

爲什麼我會得到的結果(如在第一個查詢),但它不會將它們插入到另一個表?

數據看起來像這樣:'2004-02-23 00:00:00.000'(我知道破折號並不是最佳實踐,但我沒有擺動空間,因爲這種格式已被其他同事確定) 。

我正在通過.csv導入數據,並且此列在Excel中設置爲日期格式。

更正 我現在認識到它應該是CONVERT(DATETIME,[first air date],121)。但是,這並不能解決手頭的實際問題,它將從VARCHAR轉換爲DATETIME,而不會出現「超出範圍」錯誤。

回答

3

首先,始終包含轉換的varchar的長度。其次,你真的想轉換爲DATETIME,這是目標類型。

第三,你可以使用獲得非自由兌換值:

SELECT [first air date] 
FROM mytable 
WHERE TRY_CONVERT(DATETIME, [first air date], 121) IS NULL 

然後,您可以弄清楚如何處理無法轉換的值。

+0

謝謝戈登那個快速的回答!但是,當我運行這個建議的查詢時,它只返回NULL的行。應該不存在NULL值嗎?爲什麼當我運行SELECT語句時(只是將NULL顯示爲NULL)而不是當我試圖插入轉換的數據時它工作? – CShrad

+0

這些值爲NULL,SQL值還是NULL,是一個字符串? –

+0

實際爲NULL,不是字符串 – CShrad