INSERT dbo.destination(date_column)
SELECT dt FROM
(
SELECT dt = CASE
WHEN src_date_column LIKE '%00' THEN
STUFF(src_date_column, 8, 1, '1')
ELSE src_date_column
END
FROM dbo.source
) AS x
WHERE ISDATE(dt) = 1;
コメントに対処するには:
AS x
単なるエイリアスです。派生テーブルは何かと呼ばれる必要があります。あなたがただ言うなら:
SELECT x FROM (SELECT x = 1);
この役に立たないエラーが発生します:
メッセージ102、レベル15、状態1
';'の近くの構文が正しくありません。
しかし、あなたが言うならそうではありません:
SELECT x FROM (SELECT x = 1) AS y;
他の質問については、内部に他の列を追加するだけですSELECT
。例:
INSERT dbo.Citation(PatentNo, Citation, CitedBy, CitationDate)
SELECT PatentNo, Citation, WhoCitedThis, dt
FROM
(
SELECT PatentNo, CitationSource, WhoCitedThis, dt = CASE
WHEN CitationDate LIKE '%00' THEN STUFF(CitationDate, 8, 1, '1')
ELSE CitationDate
END
FROM dbo.CitationSource
) AS x
WHERE ISDATE(dt) = 1;
ここで、20120231や20120399などの無効な日付をどのように処理するかを決定する必要があります。これらは取り残されています。私の最初の推奨事項は、それを適切な日付または日時の列にし、最初から悪い日付がシステムに入るのを拒否することです。