2

なんらかの理由で日時ではなくvarcharとして格納されている日付を持つ1つの列を持つレガシーSQLServer2000データベースがあります。このデータに対してビューを作成し、varcharの代わりに日時フィールドを使用して、フィールドに対するレポートを簡単に作成したいと思います。幸いなことに、ほとんどの値は、日時に直接キャストできるはずのように見えます。

もちろん、日時にキャストできないように入力されたフィールドもあるようです。わかりやすくするために、テーブルは次のようになります。

CREATE TABLE dbo.user
(
    ...
    birthdate varchar(10)
    ...
)

そして、ビューは次のようになります。

CREATE VIEW dbo.UserView
AS
SELECT ...
       CAST(u.birthdate AS datetime) AS birthdate
       ...
FROM user u
WHERE ...

私ができる方法はありますか:

  1. 修復できる場合に備えて、誕生日を日時にキャストできないすべての行のリストを取得しますか?
  2. 値を修復できない場合は、値をNULLとして表示するか、明らかにユーザーの実際の誕生日ではないものとして表示するようにしますか?
4

3 に答える 3

5

IsDate()を使用する

SELECT birthdate, ' ' _, *
FROM user u
WHERE IsDate(u.bithdate) != 1

SELECT ...
   CAST(CASE WHEN IsDate(u.birthdate) = 1 THEN u.birthdate ELSE NULL END AS datetime) AS birthdate
   ...
FROM user u
WHERE ...
于 2009-06-04T14:25:18.823 に答える
2

T-SQL ISDATE() 関数を確認する

于 2009-06-04T14:26:08.650 に答える
2

悪い行を表示:

select * from dbo.user where isdate(birthdate)!=1

あなたの見解:

SELECT ...
    CASE
        WHEN isdate(birthdate)=1 THEN CAST(u.birthdate AS datetime)
        ELSE NULL
    END AS Birthday
       ...
FROM user u
WHERE ...
于 2009-06-04T14:26:56.353 に答える