2017-05-12 55 views
-1

我有一個scenrio,我必須從日期中刪除一些文本,然後將它們轉換爲DATETIME。但是當我使用下面的方法時,它會導致NULL輸出。替換和轉換在SQL Server中轉換爲NULL

SELECT CAST(REPLACE('2017-09-21','',NULL) AS DATETIME) 

使用CONVERT時會出現相同的輸出。這是爲什麼發生?

+0

你想做什麼?用NULL替換空字符串? IE什麼都不替換爲Unknown? –

+0

你試圖刪除什麼文字?如果您嘗試刪除空格,那麼您將切換到REPLACE('2017-09-21','','')。這將爲你擺脫多餘的空間。 –

回答

2

這是documented

,則返回null 參數中的任何一個爲NULL。

您通過NULL作爲最後一個參數。

你可以使用NULLIF代替REPLACE

SELECT CAST(NULLIF('20170921', '') AS DATETIME) 

這將返回NULL如果字符串是空的,一個鑄造datetime否則。

1

確實指定NULL。在SQL(所有產品)中NULL表示UNKNOWN。對任何未知值應用任何函數都會導致未知結果,因此爲NULL。例外是專門用於處理NULL的函數。

雖然您很難理解表達式是如何被修復的,因爲您嘗試用NULL替換空字符串。什麼是空串應該匹配?

+0

我想他想用'NULL'替換空字符串,並且用有效的'datetime'替換非空字符串。我的建議是使用'NULLIF'。 –