此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
答案 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)
update
和select
不一定以相同的顺序处理表格。你可以尝试:
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);