簡體   English   中英

SQL Server:使用case語句查看日期是否為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM