2012-10-17 94 views
5

我在SQL Server中有一個數據庫。我沒有授權更改任何表格,但我可以創建視圖。如何將varchar轉換爲datetime並在TSQL中跳過無效的datetime

我有三個varchar列,其中的格式爲YYYYMMDD。我想創建一個日期從varchar轉換爲datetime的視圖。

現在可以是這種情況,而不是在這個列中的日期,我可以有空的空間,NULL或字符-

我們來看看closedDate這一列。如果我使用CONVERT(datetime, closedDate, 112)

  1. 有效日期正確轉換,

  2. 當有空白的日期轉換爲1900-01-01

  3. NULL保持,

  4. -導致轉換錯誤:

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

如何告訴函數來轉換日期只是如果它有有效的日期形式,並在所有其他情況下保留NULL或更好的空日期(或空格)?

回答

15

試試這個

CASE WHEN ISDATE(closedDate) = 1 THEN CONVERT(datetime, closedDate, 112) 
    ELSE NULL END closedDate 
+0

完美的感謝!如果不是NULL,我想獲得空的日期/空間? – CiccioMiami

+0

在日期時間字段中不能有空白空間。 – HLGEM

+0

感謝作品的魅力! –

0
 Use below code  


    SELECT CASE WHEN ISDATE(datecolumn)=1 THEN CONVERT(datetime, datecolumn, 103) 
         ELSE null END 
      FROM tablename 


use below for empty data 

    SELECT CASE WHEN ISDATE(datecolumn)=1 THEN CONVERT(datetime, datecolumn, 103) 
          ELSE '' END 
       FROM tablename 
+0

第二個示例將無法按預期工作。 SQL(TSQL PL/SQL)必須爲行輸出選擇數據類型 - 並且由於該列看起來是日期時間 - 所以所有值必須轉換爲日期時間。並且在SQL Server上將一個空字符串轉換爲datetime返回「1900-01-01 00:00:00」(我將在Oracle上打賭)。 – ripvlan

+0

是的,它會返回默認日期1900-01-01 00:00:00.000 – Shridhar