2014-10-09 106 views
2

我想將日期時間字段轉換爲varchar,以便日期爲空時顯示空白或消息。 這是我到目前爲止有:將NULL日期時間轉換爲空白

select 
isnull(us.Date,0) as USDate, 
isnull(au.Date,0) as AUDate 
from ustable us 
left join autable au 
on us.column=au.column 

眼下這正顯示出:

USDATE 
2014-10-24 10:29:07.450 
1900-01-01 00:00:00.000 

我希望能夠讓 「1900-01-01 00:00:00.000」 varchar所以我可以寫一條消息或顯示一個真正的空白。

+1

我會建議做這種類型的前端,而不是在SQL中的格式。讓你的應用程序處理顯示。 – 2014-10-09 15:30:35

回答

3

您可以使用CaseCONVERT這樣的 -

SELECT 
CASE WHEN us.Date IS NULL THEN '' ELSE CONVERT(VARCHAR(30), us.Date, 121) END AS USDate, 
CASE WHEN au.Date IS NULL THEN '' ELSE CONVERT(VARCHAR(30), au.Date, 121) END AS AUDate 
FROM ustable us 
left join autable au 
on us.column=au.column 
+0

這實際上會輸出'1900-01-01 00:00:00.000'。 – 2014-10-09 15:42:44

+0

我已經更新了我的答案。現在檢查.. – 2014-10-09 15:46:31

+0

第二個「CASE」是否缺少「END」? – 2014-10-09 21:03:21

-1

嘗試這樣的事情...

select 
CONVERT(varchar(50), isnull(us.Date,0)) as USDate, 
CONVERT(varchar(50), isnull(au.Date,0)) as AUDate 
from ustable us 
left join autable au 
on us.column=au.column 

你想改變VARCHAR的取決於你的日期格式大小。另外,CONVERT還有第三個參數,可以讓你改變字符串的格式。

+0

這會在我的系統上返回'Jan 1 1900 12:00 AM',而不是''''。 – 2014-10-09 18:37:49

+0

「isnull(us.Date,0)」應該返回一個整數零。然後,Convert語句應該將其轉換爲字符串「0」。如果用空字符串替換IsNull語句的第二個參數,會得到什麼結果? – DeadZone 2014-10-09 19:17:11

+0

如果'us.Date'是日期/日期時間等,它不會。你是否嘗試過***? – 2014-10-09 19:47:14

0

要做到這一點在SQL:

改變你SELECT聲明摻入WHEN ...... THEN條款:

CASE us.Date 
    WHEN '1900-01-01 00:00:00.000' THEN '' 
    WHEN NULL THEN '' 
    ELSE us.Date 
END as USDate, 
CASE au.Date 
    WHEN '1900-01-01 00:00:00.000' THEN '' 
    WHEN NULL THEN '' 
    ELSE au.Date 
END as AUDate 

如果您有前端代碼,那麼你可以只實現該功能在前端沒有改變你的SQL代碼。

+0

兩個問題:(1)當表中的日期爲NULL時,它們需要一個空字符串,而不是1900-01-01(2)即使日期實際上有一個有效值(1900-01-01除外),它也會返回NULL )。 – 2014-10-09 18:39:36

+0

你是對的。我當時無法測試,因爲我沒有訪問SQL。 – 2014-10-09 21:02:31

0

鑑於這樣定義的列:

date_of_birth datetime null 

你可以簡單地說

select date_of_birth = coalesce(convert(varchar(32),date_of_birth) , '') 
from some_table_with_a_nullable_datetime_column 
0

我已經找到了你要完成的是如下的代碼最簡單的線條。

ISNULL(CONVERT(VARCHAR(30),us.Date,121),'') as USDate, 
ISNULL(CONVERT(VARCHAR(30),au.Date,121),'') as AUDate, 

我測試了這個並驗證了它的工作原理。

相關問題