UPDATE monthly_report_c a
LEFT JOIN
(
SELECT DATE_FORMAT((STR_TO_DATE(a.TRANSACTION_DATE,'%d.%m.%Y')), '%Y%m') mnt,
COUNT(DISTINCT a.CUSTOMER_ID) totalNum
FROM spendingtx a
WHERE a.CARD_PROGRAM = "visa"
AND CAST(a.AMOUNT AS DECIMAL(5,2)) > 0.01
GROUP BY DATE_FORMAT((STR_TO_DATE(a.TRANSACTION_DATE,'%d.%m.%Y')),'%Y%m')
) b ON b.mnt = a.Month_Number
.
.
.
SET a.visa = IFNULL(b.totalNum, 0)
上面的代码从spendingtx
表中提取并更新另一个表,其中第一个字段为yearmonth
(即201309 201310 ......等)
我收到了这个错误:
[Err] 1264 - 第1行的列'(null)'超出范围值
答案 0 :(得分:0)
您的DBMS似乎是MySQL(我的 5.6.34 - MySQL社区服务器(GPL)),错误发生在CAST()
。
在INSERT
/ UPDATE
之外,MySQL不会抛出任何内容。
SELECT CAST( 12345 AS DECIMAL(3, 2) ) AS f;
输出:
f
9.99
在INSERT
/ UPDATE
内,错误被明确抛出。
CREATE TABLE `t` (
`c` blob NOT NULL
) ENGINE=InnoDB;
INSERT INTO t
SELECT CAST( 12345 AS DECIMAL(3, 2) ) AS f;
输出:
#1264 - Out of range value for column 'f' at row 1
来自WHERE
条款的消息有点奇怪。
INSERT INTO t
SELECT 1
FROM t
WHERE CAST( 12345 AS DECIMAL(3, 2) );
输出:
#1264 - Out of range value for column '(null)' at row 1