2016-11-19 130 views
1

我的表中有一個名爲startdate的列。它是字符串格式。大部分字段都是'NULL'。我正在將此列複製到另一個數據類型爲「日期」的表中。 如何在SQL中將字符串中的所有值轉換爲日期。 我試過這段代碼:在SQL中將'NULL'轉換爲日期

INSERT INTO Destination_Table [new_date] 
SELECT CONVERT(DATE,[startdate],103) 
FROM Source_Table 
+1

爲什麼你不設定日期列與今天的日期自動填充(或任何給定的日期),並只需要將行導入爲null。然後將日期字段返回到正常日期,並導入其餘的日期?也許不如有光澤,但比試圖找到正確的解決方案更快? – junkfoodjunkie

+0

你的代碼應該可以工作。問題是什麼? –

+0

這是錯誤消息:從字符串轉換日期和/或時間時轉換失敗。 – Sam

回答

1

看起來你正在使用MSSQL。如果使用的是MSSQL 2012,下面的代碼應該工作:

INSERT INTO Destination_Table [new_date] 
SELECT IIF([startdate] = "NULL", null, CONVERT(DATE,[startdate],103)) 
FROM Source_Table 

這裏做的事情,就是用IIF()方法來檢查的[startdate]的值,如果值是文字「NULL」,然後返回實際null值可以在大多數字段中允許,除非您在Destination_Table上禁用了null。 [new_date]字段。由於日期字段只能接受並存儲日期/時間/日期&時間/(實際空值)信息,因此文本「NULL」無效。

以下是MySQL

INSERT INTO Destination_Table [new_date] 
SELECT IF([startdate] == 'NULL', null, CONVERT(DATE,[startdate],103)) 
FROM Source_Table 

等效(雖然我不確定MySQL允許轉換代碼作爲參數去CONVERT()

1

NULLIF([STARTDATE], 'NULL')返回[STARTDATE]除非它等於 'NULL',然後將其返回NULL(實NULL,不是字符串 'NULL')

INSERT INTO Destination_Table [new_date] 
SELECT CONVERT(DATE,nullif([startdate],'NULL'),103) 
from Source_Table 

學習之用,這裏有一些表述相同的結果:

nullif(x,y) 

case when x=y then null else x end 

case x when y then null else x end 
+0

@JibinBalachandran,這是代碼處理的內容,因此NULLIF –