2012-03-16 16 views
0

私のロジックが日付を決定するケースステートメントを使用したいと思います。返される値がヌル値の場合、代わりにヌル値の代わりに 'none'を表示したいと考えています。T-sql:日付を表示するか日付をnvarcharに変換する

以下のコードを参照してください。私はそれがNVARCHARに変換する試みたが、動作していないthatsのよう

CASE WHEN DATEDIFF(d, vso.pod_ata, ISNULL(cncr.cntr_date3, GETUTCDATE())) - 14 > 0 THEN vso.pod_ata + 14 
ELSE CONVERT(NVARCHAR(10), 'none') 
END AS 'start_dem', 

SQL Serverは変換不満ました。誰もがこれに対して良い解決策を知っていますか?

答えて

2

私の知っているところでは、SQLは同じ列の混合データ型を許可していません。 vso.pod_ata + 14NVARCHARにも変換してください。

CASE WHEN DATEDIFF(d, vso.pod_ata, ISNULL(cncr.cntr_date3, GETUTCDATE())) - 14 > 0 THEN CONVERT(NVARCHAR(50), vso.pod_ata + 14) 
ELSE CONVERT(NVARCHAR(50), 'none') 
END AS 'start_dem', 
+0

これは動作しますが、これを行うと日付の書式が失われます。私は日付がyyyy-mm-ddになるようにしたい。 –

+0

@nickgowdy:[形式を選択](http://msdn.microsoft.com/en-us/library/ms187928.aspx "CAST and CONVERT(Transact-SQL)")、[文字列を切り捨てる] (http://msdn.microsoft.com/en-us/library/ms187748.aspx "SUBSTRING(Transact-SQL)")必要に応じて後でします。 –

+0

私はこのコードを使用し、@AndriyMのコメントから日付フォーマットコードを追加したので、これを正解とマークしました。みんなありがとう!! –

4

文字列ではなく、日付を変換する必要があります。

CASE WHEN DATEDIFF(d, vso.pod_ata, ISNULL(cncr.cntr_date3, GETUTCDATE())) > 14 THEN convert(VARCHAR(10), dateadd(day, 14, vso.pod_ata), 120) 
ELSE 'none' 
END AS 'start_dem', 
+0

私たちの回答は非常に似ていたので、答えに私の答えの変更を適用して、OPに彼が要求した形式を与えました。私は自分自身の答えを削除し、あなたをアップアップしました。 –