2009-06-26 2 views
0

私はこのテーブルを持っています。テーブルには一連のcharフィールドがありますが、問題のフィールド(expiredate)には、test_tmpテーブルのcharとテストテーブルのdatetimeが含まれています。datetimeフィールドにこのmysqlテーブルがNULLを生成するのはなぜですか?

test_tmpテーブルでは、フィールドに 'Aug 10'や 'Feb 20'のような月 - 日のペアが含まれています。私はデータを挿入するために使用しているコードは次のとおりです。

INSERT IGNORE INTO test (RECNUM, ORDERNUM, CREATEDATE, EXPIREDATE, FNAME, LNAME) 
    SELECT RECNUM, ORDERNUM, CREATEDATE, 
    CAST(CASE WHEN str_to_date(concat(expiredate, ' ', year(now())), '%b %d %Y') <= CURDATE() 
    THEN str_to_date(concat(expiredate, ' ', 1+year(now())), '%b %d %Y') 
    ELSE str_to_date(concat(expiredate, ' ', year(now())), '%b %d %Y') END AS DATETIME) AS EXPIREDATE, FNAME, LNAME FROM test_tmp 

本当にpuzzingだが、私は、クエリの「選択」セクションを実行する場合、すべてが正常に見えるということです。しかし、私が(テスト・テーブルを最初に切り捨てて)すべてを実行すると、すべての行には満了時にNULLが含まれます。

答えて

0

まあ、私は自分の質問に対する答えを見つけました。

質問に「drupal」タグを入れていることに注意してください。クエリはDrupalを経由していました...データを置き換えるために使用したくない場合は、%文字をエスケープする必要があります。したがって、str_to_date(concat(expiredate, ' ', year(now())), '%b %d %Y')は実際にはstr_to_date(concat(expiredate, ' ', year(now())), '%%b %%d %%Y')である必要がありました。

お寄せいただきありがとうございます。

2

悲しいことに、まだコメントを設定できません。だから私はここにそれを書かなければならない。

SQL文の最後には、 ')'が多くあります。このコードをコピーして貼り付けている間、多分切り抜かれていますか?あなたのクエリをテストするには

+0

ええ、ありがとう。私はそれを修正した。 –

0

、私は次のことを実行しました:

SELECT CAST(CASE WHEN str_to_date(concat('Jan 5', ' ', year(now())), '%b %d %Y') <= CURDATE() 
    THEN str_to_date(concat('Jan 5', ' ', 1+year(now())), '%b %d %Y') 
    ELSE str_to_date(concat('Jan 5', ' ', year(now())), '%b %d %Y') END AS DATETIME) AS EXPIREDATE; 

これがうまく働きました。ただ確実にするために、EXPIREDATEは "Jan 5"などの形式でなければなりません。そうしないと、str_to_dateの失敗からNULLが返されます。

+0

ええ、データ上で 'SELECT'クエリを単独で実行すると、間違いなく良い日付が得られます。 –

1

エラーメッセージが表示されますか?

IGNOREを離れたままにして、メッセージがあるかどうか確認できますか?

MySQL websiteによると: エラーをトリガーするデータ変換は、IGNOREが指定されていない場合はステートメントを中止します。 IGNOREでは、無効な値が最も近い値に調整されて挿入されます。警告は生成されますが、文は中止されません。

このような調整は、お客様のケースで発生する可能性があります。どのようなフィールドが期限切れですか?

+0

一度IGNOREを実行せずにエラーが発生していないことを覚えていますが、月曜日にもう一度試してみます。ソーステーブルのexpiredateは 'Aug 10'のようなMMM DDです。ターゲットテーブルのexpiredateはdatetimeフィールドです。 –

関連する問題