2017-10-16 746 views
0

對於多個基本問題的道歉 - 我對SQL很陌生,仍在努力解決問題。在SQL中循環使用CASE WHEN和REPLACE語句

我想從我的登臺表中插入記錄到我數據庫中的另一個表中,都使用'replace'函數刪除源文件中的雙引號,並將數據從nvarchar(登臺表)轉換爲datetime2。我不能完全解決如何做到這一點:如果我的循環「情況下,當」內「替換」,如跌破的話,SQL不承認我的數據和空出來:

CASE WHEN ISDATE (REPLACE([Column1], '"', '')) = 1 
    THEN CONVERT(datetime2, Column1, 103) 
        ELSE null END 

但是,如果我環路我的我的「情況下,當」內「替換」,如下,SQL給我一個錯誤消息說,它無法爲nvarchar轉換成DATETIME2:

LTRIM(REPLACE([Column1], '"', '') 
    ,CASE WHEN ISDATE(Column1) = 1 THEN CONVERT(datetime2, Column1, 103) 
        ELSE null END 

我需要使用什麼命令/語法爲了達成這個?數據字段的一個例子是: 「16/10/2017」

它上傳到我的臨時表爲nvarchar的 「16/10/2017」

,我想將其移動到我的表2爲DATETIME2: 16/10/2017

+0

你可以張貼一些樣本數據和期望的輸出? – Leonidas199x

+0

你能夠以不太模糊的格式上傳數據,例如'yyyymmdd'嗎? – iamdave

回答

2

相反的isdate(),使用try_convert()

TRY_CONVERT(datetime2, LTRIM(REPLACE([Column1], '"', ''), 103) 

我覺得你的困惑是,你需要做的字符串操作之前的轉換。爲此,字符串操作必須是轉換的參數。

+0

感謝您的回覆!是的,這是我需要的邏輯,只是不知道如何語法 - 不幸的是,這仍然給我'空'作爲值。 – Sam109

+0

對不起 - 我先前的評論道歉 - 這已經奏效!非常感謝你! – Sam109

1

你做得對。問題是,convert需要價值沒有" ",因此你的轉換失敗。

就試試這個:

select 
CASE WHEN ISDATE (REPLACE([Column1], '"', '')) = 1 
    THEN CONVERT(datetime2, (REPLACE([Column1], '"', '')), 103) 
    ELSE null END 
from #tbl 

更多細節:cast and convert doc

+0

謝謝 - 不幸的是我仍然得到以下錯誤:「轉換日期和/或時間從字符串轉換失敗。」 – Sam109

+0

@ Sam109:提供一些樣本數據。因爲在我的示例數據中,此代碼正在工作。 –