第1行的列'(null)'超出范围值

时间:2013-10-01 16:15:00

标签: mysql sql

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)'超出范围值

1 个答案:

答案 0 :(得分:0)

您的DBMS似乎是MySQL(我的 5.6.34 - MySQL社区服务器(GPL)),错误发生在CAST()

  1. INSERT / UPDATE之外,MySQL不会抛出任何内容。

    SELECT CAST( 12345 AS DECIMAL(3, 2) ) AS f;
    

    输出:

    f
    9.99
    
  2. 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
    
  3. 来自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