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

4

1 回答 1

0

您的 DBMS 似乎是 MySQL(我的是5.6.34 - MySQL Community Server (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
    
于 2017-01-13T14:16:24.573 回答