![](/img/trans.png)
[英]SQL - Using CASE statement with multiple IS NULL, IS NOT NULL
[英]SQL Server: Using a case statement to see if a date is NULL and if it is returning ' '
我的select語句中有一列看起來像這樣:
SELECT CASE WHEN fu.SentOutDate IS NULL THEN '' ELSE fu.SentOutDate END
這將返回1900-01-01 00:00:00.000
,否則返回NULL
我知道這一點,因為當我放入fu.SentOutDate
它顯示為NULL
為什么會發生這種情況,我如何才能讓它返回空白值?
嘗試將日期轉換為字符串,這樣就不會嘗試將”轉換為日期:
(CASE WHEN fu.SentOutDate IS NULL THEN '' ELSE CONVERT(varchar,fu.SentOutDate) END)
它會將您的''強制轉換為DATETIME,因為您要返回的另一列是datetime列。
SELECT CASE WHEN 1=1 THEN '' ELSE GETDATE() END
會給你同樣的價值...
您可以將其轉換為varchar(32),但我不確定其后果
SELECT CASE WHEN 1=1 THEN '' ELSE CAST(GETDATE() AS varchar(32)) END
列只能返回一種數據類型-DATETIME!= string / VARCHAR。
如果在值是NULL的情況下想要零長度的字符串,則必須使用CAST / CONVERT將非NULL值更改為VARCHAR / etc數據類型來顯式更改數據類型。
如果僅檢查NULL值,則可以嘗試ISNULL()並將日期強制轉換為varchar。
SELECT ISNULL(CAST(fu.SentOutDate AS VARCHAR(50),'')AS SendOutDate FROM表名
這可能起作用:
case when ISNULL(convert(varchar, a.rec_dt, 108), '00:00:00')='00:00:00' then ''
else CAST(rec_dt as varchar)
聽起來您在某個地方的GUI或客戶端中顯示此值。 我認為,最佳實踐是從那里的NULL值而不是在查詢中將其轉換。
如果您曾經創建可擴展到數百萬用戶的數據庫,則需要在數據庫中進行盡可能少的處理,並在客戶端中進行盡可能多的處理。 將日期轉換為字符是系統上不必要的負載(字符計算總是比數學慢得多)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.