datetime にキャストできない varchar 値を含む行のリストを取得できますか?
-
10-09-2019 - |
質問
レガシー SQL Server 2000 データベースには、何らかの理由で datetime ではなく varchar として保存されている日付を持つ列が 1 つあります。このデータに対してビューを作成し、varchar の代わりに datetime フィールドを使用して、フィールドに対するレポートの作成を簡単にしたいと考えています。良いニュースは、 ほとんど 値の一部は日時に直接キャストできるように見えます。
もちろん、日時をキャストできない方法で入力されたフィールドもいくつかあるようです。わかりやすくするために、テーブルは次のようになります。
CREATE TABLE dbo.user
(
...
birthdate varchar(10)
...
)
ビューは次のようになります。
CREATE VIEW dbo.UserView
AS
SELECT ...
CAST(u.birthdate AS datetime) AS birthdate
...
FROM user u
WHERE ...
何か方法はありますか:
- 修復できる場合に備えて、生年月日を日時にキャストできないすべての行のリストを取得しますか?
- 値を修復できない場合は、値を NULL として表示するか、明らかに値が表示されるようにします。 ない ユーザーの本当の誕生日?
解決
を使用 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 ...
他のヒント
悪い行を表示します:
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 ...
所属していません StackOverflow