2016-08-08 24 views
0

我的查询应该是简单...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` 

但我不能改变数据库字段的。

+0

是否因为您在本节中使用和下划线而不是减号'-' STR_TO_DATE(Update_Date,'%d /%m /%Y')> CURDATE()_ INTERVAL 5 DAY' – RiggsFolly

+0

糟糕 - 这是一个错字。现在更新。 – JezB

+0

如何在复制/粘贴中输入错字?如果它不是复制/粘贴其他内容不是真实代码中的内容吗? – RiggsFolly

回答

0

您似乎在发送datetime而您的字段为date。可能您应该将表格结构从date更改为datetime

+0

我无法更改数据库结构! – JezB

+0

OP表示日期全部存储为VARCHAR! – RiggsFolly

+0

这并不重要。可以忽略时间部分尝试'select STR_TO_DATE('11/4/2013 00:00:00','%d /%m /%Y')' – e4c5

相关问题