2017-08-22 16 views
1

目前,我有以下代碼:SQL日期返程如果null,則空白

CASE WHEN CONVERT(DATE, BirthDateTime) IS NULL THEN '' END AS DOB, 
CASE WHEN CONVERT(DATE, ServiceDateTime) IS NULL THEN '' END AS [Admission Date], 
CASE WHEN CONVERT(DATE, DischargeDateTime) IS NULL THEN '' END AS [Discharge Date], 

它返回:

enter image description here

什麼是日期仍要轉換爲日期的最佳方法(原字段是日期時間),如果它是空然後返回空白或''

在此先感謝!

+1

你正在使用哪些DBMS?當你編寫你的問題並添加了SQL標籤時,向你展示了一個大框,這表明你還爲特定DBMS添加了一個標籤,因爲它們之間的語法和功能不同。你爲什麼決定忽略這個建議? –

+0

ISNULL(COLUMNNAME,'')在sql server中,並檢查出coalesce以及學習目的。 – Amit

+0

你正在使用哪些DBMS? ---我不明白。 SQL Server 2012? – cmpmd2

回答

1

在SQL Server:

既然你想用一個空字符串代替null,那麼你將要轉換爲字符串。你可以沿着使用的10大小與樣式120返回ISO格式(沒有時間部分),像這樣:

select 
    dob = isnull(convert(varchar(10),BirthDateTime,120),'') 
    , [Admission Date] = isnull(convert(varchar(10),ServiceDateTime,120),'') 
    , [Discharge Date] = isnull(convert(varchar(10),DischargeDateTime,120),'') 
from ... 

您可以找到其他風格的代碼convert()這裏:docs: cast and convert

+0

我會改變一件事 - 使用'char(10)'而不是'varchar(10)',因爲它是一個固定的長度。 –

+0

@ZoharPeled通常我會,但是因爲'null'被轉換爲空字符串,並且轉換會將空字符串更改爲10個空格......我只是不喜歡我的結果集中的一堆空格字符而不是一個空字符串。 – SqlZim

+0

好點,我沒有想過。 –

0

你可以使用合併。列必須始終有一種類型,無論行的,所以你必須給它傳遞到合併之前,你的約會對象類型轉換爲文本類型:

COALESCE(CONVERT(VARCHAR(100), BirthDateTime), '') AS DOB, 
0

對於SQL Server

SELECT ISNULL(DOB,'') AS DOB FROM TABLE 
+1

這不起作用,'isnull'的兩個參數都必須具有相同的類型 – Andomar

相關問題