MYSQL - 截断不正确的DOUBLE值:' - '

时间:2014-12-12 00:15:54

标签: mysql

此UPDATE失败并显示错误“截断错误的DOUBLE值:' - '”,我无法弄清楚原因。

UPDATE psych
SET pdqp_adm=CAST((CAST(pdqt_adm AS SIGNED)) - (CAST(pdqf_adm AS SIGNED)) AS CHAR)
WHERE pdqt_adm>0 
    AND pdqt_adm IS NOT NULL 
    AND pdqf_adm>0 
    AND pdqf_adm IS NOT NULL 
    AND pdqt_adm>=pdqf_adm

此处使用的所有列(pdqp_adm,pdqt_adm,pdqf_adm)都是VARCHAR(6)。我可以做这个查询,计算工作正常:

SELECT CAST((CAST(pdqt_adm AS SIGNED)) - (CAST(pdqf_adm AS SIGNED)) AS CHAR)
FROM psych
WHERE pdqt_adm>0 
    AND pdqt_adm IS NOT NULL 
    AND pdqf_adm>0 
    AND pdqf_adm IS NOT NULL 
    AND pdqt_adm>=pdqf_adm

2 个答案:

答案 0 :(得分:0)

好的,这个错误与计算值无关。

当我运行它时,我得到同样的错误(仅适用于ID为4972的记录):

SELECT p.id, p.pdqt_adm, p.pdqf_adm
FROM psych p
WHERE p.pdqt_adm>0 
    AND p.pdqt_adm IS NOT NULL 
    AND p.pdqf_adm>0 
    AND p.pdqf_adm IS NOT NULL 
    AND p.id=4972

事实证明,用于比较0和彼此的2列都包含值“ - ”。现在,为什么这不会影响我在上面的问题中的SELECT,但确实会影响我的UPDATE ...我不知道。

答案 1 :(得分:0)

updateselect不一定以相同的顺序处理表格。你可以尝试:

UPDATE psych
SET pdqp_adm=CAST((CAST(pdqt_adm AS SIGNED)) - (CAST(pdqf_adm AS SIGNED)) AS CHAR)
    WHERE (case when pdqt_adm <> '-' then pdqt_adm else 0 end)  > 0 AND
          pdqt_adm IS NOT NULL AND
          (case when pdqf_adm <> '-' then pdqf_adm else 0 end) > 0 AND
          pdqf_adm IS NOT NULL AND
          (case when pdqt_adm <> '-' then pdqt_adm else 0 end) >= (case when pdqf_adm <> '-' then pdqf_adm else 0 end);