2017-03-21 10 views
1

私は以下のように書いたクエリにカラムを持っています。SQLケースを使用する日付がある場合

**RCPT_DATE** 
NULL 
2017-01-09 00:00:00.000 
NULL 
NULL 
1900-01-01 00:00:00.000 
1900-01-01 00:00:00.000 
1900-01-01 00:00:00.000 
2016-09-05 00:00:00.000 

私は何をしたいNULL値を取り除くと、代わりに「使用不可」と表示「いいえRCPT」を表示しますさ「1900-01-01 00:00:00.000」の値それがきれいに見えるようにします。

私は以下試してみたが、それは私が試したもの

CASE c.RCPT_DATE 
    WHEN '1900-01-01 00:00:00.000' THEN '' 
    WHEN NULL Then 'xxx' 
    ELSE c.RCPT_DATE 
    END AS RCPT_DATE, 

をしない、

CASE c.RCPT_DATE 
    WHEN '1900-01-01 00:00:00.000' THEN NULL 

これは、1900年1月1日0時00分「の代わりにNULLを出力します。 00.000 'の値ですが、それは私が望むものではありません。

すべてのヘルプは

おかげ

+0

文字列として保存された日付は間違いありませんか? (私はそれをお勧めしません) –

答えて

8

を動作するはずです、私はこの作業を見る唯一の方法は次のとおりです。

CASE 
    WHEN c.RCPT_DATE = '1900-01-01 00:00:00.000' THEN 'No RCPT' 
    WHEN C.RCPT_DATE IS NULL THEN 'Unavailable' 
    ELSE CONVERT(VARCHAR(30), C.RCPT_DATE, 121) 
END 

あなたは同じ列の日付と文字列を組み合わせることはできませんので、私はCONVERT()を追加しました。

+1

領収書日付をvarcharに変換して、 'CASE'式のすべてのブランチが同じタイプであることを確認しました+1 –

+0

ありがとう!!!それは動作します! – Sinnerv

+1

ありがとう@TimBiegeleisen! –

1

を高く評価し、次を試してみてください。

CASE c.RCPT_DATE 
WHEN '1900-01-01 00:00:00.000' THEN 'No Rcpt' 
ELSE ISNULL(CAST(c.RCPT_DATE as VARCHAR(50)),'Unavailable') 
END AS RCPT_DATE 

はそれが役に立てば幸い!

PS - 編集し、

+0

それは動作しません、私はこれを以前に試してみました。 エラー "文字列から日付および/または時刻を変換するときに変換に失敗しました。" – Sinnerv

+3

'ISNULL'はそのデータ型が' datetime'であることを最初の引数の型であると判断します。これは次に、優先順位のために、 'CASE'式の型が' datetime'であることを意味します。これは、 'Rcpt'と' Unavailable'を 'datetime'に変換できないというエラーを意味します。 (Twas a nice idea :-)) –

+0

@Damien_The_Unbelieverまあまあです! – G0dsquad

関連する問題