プロが教えるわが家の防犯対策術!

開発環境 SQLSERVER VB2005

SQLのCASE文についての質問ですが、DATE型のデータが有効値の場合は”スペース”それ以外の場合は格納されているDATE型を表示したいのですが、どなたかご教授お願いいたします。下記のSQLでは全ての日付が出てしまいます。

SELECT CASE 日付 WHEN '2000/01/01' THEN ' '
    ELSE 日付     
    END AS Expr1
FROM  テーブル

CASE文以外でもできますか?
よろしくお願いいたします。

A 回答 (5件)

#2、#4です。



#4を回答していて気づいたのですが、もしかして有効値でない日付にNULLではなく「1900-01-01 00:00:00」のデータが設定されていませんか?
一度データの中身を確認された方がよいかと思われます。

この回答への補足

tkrnさん丁寧な回答大変助かります。

DateTimePickerからバインドでデータを持ってきていますので、登録時に「1900-01-01 00:00:00」のデータが入ってきています。
DB型がDATETIME型ですので、NULLを登録していない為です。

1900-01-01 00:00:00 の場合はデータグリッド上で表示しないように「スペース」にしたいということです。有効値は実際の日付が登録されています。説明不足でした。すみません。

DBにNULLで設定する方法など設計段階からでも結構ですのでアドバイス頂けると助かります。
よろしくお願いします。

補足日時:2007/06/29 08:40
    • good
    • 0

どこで日付が表示されていますか?


Management Studio?それとも操作しているアプリケーション側でしょうか?

受け取り側がString型でなくDateTime型になっていませんか?

スペースを逆にDATETIME型にCASTすると「1900/01/01 00:00:00 000」と表示されますので、それに関係ないですか?

SELECT CAST(' ' AS DATETIME) FROM テーブル

結果
1900-01-01 00:00:00 000
    • good
    • 0

失礼致しました。



多分、これでしょうね。
SELECT CASE ISDATE(利用日付) WHEN 1 THEN ' '
ELSE CONVERT(varchar(20),利用日付, 111) END AS Expr1
FROM テーブル
    • good
    • 0

CASE文を使わない方法でしたら



SELECT ISNULL(CONVERT(VARCHAR,日付,111),' ') AS Expr1
FROM テーブル

でどうでしょうか?

この回答への補足

お答えいただいた回答、2つともなぜかスペースが表示されず、日付が表示されてしまったので、下記で試してみたらできました。ありがとう御座いました。

SELECT CASE 利用日付 WHEN '1900-01-01 00:00:00' THEN ' '
ELSE CONVERT(varchar(20),日付, 100) END AS Expr1
FROM テーブル

なにか使い方が間違っている気がしますが・・・

補足日時:2007/06/27 12:59
    • good
    • 0

お早うございます。



こんな感じかな~。
SELECT CASE 日付 WHEN ISDATE(日付) THEN ' '
    ELSE 日付
    END AS Expr1
FROM  テーブル
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!