2016-08-08 1 views
0

を与える...両方のテーブルにのMySQL:DUPLICATE KEY UPDATE ON私のクエリは簡単であるべき切り捨てられた不正な日付値の誤差に

INSERT INTO email_final_list 
(E_mail, Title, First_Name, Last_Name, ZIP_Code, AddMethod, Update_Date, Status) 
SELECT 
    DISTINCT E_mail, 
    Title, 
    First_Name, 
    Last_Name, 
    ZIP_Code, 
    CASE WHEN AddMethod IS NULL THEN 'Opera' ELSE 1 END as AddMethod, 
    Update_Date, 
    Status 
FROM guest_profiles 
WHERE E_mail NOT LIKE '' AND ifnull(Update_Date, '') <> '' AND STR_TO_DATE(Update_Date,'%d/%m/%Y') > CURDATE() - INTERVAL 5 DAY 
ON DUPLICATE KEY UPDATE 
    email_final_list.E_mail = guest_profiles.E_mail, 
    email_final_list.Title = guest_profiles.Title, 
    email_final_list.First_Name = guest_profiles.First_Name, 
    email_final_list.Last_Name = guest_profiles.Last_Name, 
    email_final_list.ZIP_Code = guest_profiles.ZIP_Code, 
    email_final_list.AddMethod = guest_profiles.AddMethod, 
    email_final_list.Status = guest_profiles.Status, 
    email_final_list.Update_Date = guest_profiles.Update_Date 

「更新日」フィールドはVARCHAR(なぜ全く分からない、ですが、これはすることはできませんかわった)。私はこれを実行したときしかし、それは本当に奇妙なことは、私はそれ自身の上のSELECTの部分を実行する場合、私は何も結果を得ることはありませんということです

[Err] 1292 - Truncated incorrect date value: '11/4/2013 00:00:00' 

返します。

データベースは継承されているため、変更することはできません。スキーマ&の名前はすべてあちこちにありますが、残念ながら私はそれを使用しなければなりません。

私がここで間違っていることを誰もが知っていますか?

おかげ

編集:EXACTコードが

INSERT INTO `email-final-list` 
(`E-mail`, Title, `First Name`, `Last Name`, `ZIP Code`, AddMethod, `Update Date`, `Status`) 
SELECT 
    DISTINCT `E-mail`, 
    Title, 
    `First Name`, 
    `Last Name`, 
    `ZIP Code`, 
    CASE WHEN AddMethod IS NULL THEN 'Opera' ELSE 1 END as AddMethod, 
    `Update Date`, 
    `Status` 
FROM `guest-profiles` 
WHERE `E-mail` NOT LIKE '' AND ifnull(`Update Date`, '') <> '' AND STR_TO_DATE(`Update Date`,'%d/%m/%Y') > CURDATE() - INTERVAL 5 DAY 
ON DUPLICATE KEY UPDATE 
    `email-final-list`.`E-mail` = `guest-profiles`.`E-mail`, 
    `email-final-list`.Title = `guest-profiles`.Title, 
    `email-final-list`.`First Name` = `guest-profiles`.`First Name`, 
    `email-final-list`.`Last Name` = `guest-profiles`.`Last Name`, 
    `email-final-list`.`ZIP Code` = `guest-profiles`.`ZIP Code`, 
    `email-final-list`.AddMethod = `guest-profiles`.AddMethod, 
    `email-final-list`.`Status` = `guest-profiles`.`Status`, 
    `email-final-list`.`Update Date` = `guest-profiles`.`Update Date` 

あるしかし、私はAT ALLデータベースフィールドを変更することはできません。

+0

この句では、 'STR_TO_DATE(Update_Date、 '%d /%m /%Y')> CURDATE()_ INTERVAL 5 DAY'のマイナス記号' -'の代わりに '_'を使用しているためですか? – RiggsFolly

+0

おっと - それはタイプミスでした。今更新されました。 – JezB

+0

コピー/ペーストでどのようにタイプミスをしますか?そして、それが実際のコードにあるようにコピー/ペースト以外のものがないのであれば? – RiggsFolly

答えて

0

あなたのフィールドがdateである間は、datetimeを送信しているようです。おそらく、テーブル構造をdateからdatetimeに変更する必要があります。

+0

私はデータベース構造を変更できません! – JezB

+0

OPの日付はすべてVARCHAR! – RiggsFolly

+0

は関係ありません。時間部分を無視することができますtry 'select STR_TO_DATE('11/4/2013 00:00:00 '、'%d /%m /%Y ')' – e4c5

関連する問題