1

データを適切に変換する方法を見つけるのに苦労しています。現在の形式ではvarcharであり、データは次のとおりです。

19260200、19770900、20030400、20120300、20020500、

ご覧のとおり、私には年と月がありますが、日付の値はありません。日時としてフォーマットされたSQLフィールドに挿入しようとすると、エラーが発生します。誰かが私がこれを修正する方法を知っていますか?私は700,000レコードのDBを使用しているので、手動で調べて変更するだけでなく、それに対処するためのコードを記述できる必要があります。

助けてくれてありがとう!!!

4

2 に答える 2

1
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などの無効な日付をどのように処理するかを決定する必要があります。これらは取り残されています。私の最初の推奨事項は、それを適切な日付または日時の列にし、最初から悪い日付がシステムに入るのを拒否することです。

于 2012-07-17T02:03:41.073 に答える
0

あなたはこのようなことを試すことができます:

cast(left(val, 6)+'01') as date)

つまり、有効な日の値を文字列に挿入して変換を実行します。

于 2012-07-17T02:01:39.393 に答える