我的查询应该是简单...MySQL的:对重复密钥更新给截断不正确的日期值误差
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(不知道为什么,但是这不能成为改变)。但是,当我运行它,它返回
[Err] 1292 - Truncated incorrect date value: '11/4/2013 00:00:00'
真正奇怪的是,如果我在它上面运行自己的SELECT部分,我没有得到任何结果。
数据库被继承,因此无法更改 - 模式&名称遍布整个地方,但不幸的是,我必须使用它。
有谁知道我在这里做错了吗?
感谢
编辑:确切的代码是
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`
但我不能改变数据库字段的。
是否因为您在本节中使用和下划线而不是减号'-' STR_TO_DATE(Update_Date,'%d /%m /%Y')> CURDATE()_ INTERVAL 5 DAY' – RiggsFolly
糟糕 - 这是一个错字。现在更新。 – JezB
如何在复制/粘贴中输入错字?如果它不是复制/粘贴其他内容不是真实代码中的内容吗? – RiggsFolly