【问题标题】:Out of range value for column '(null)' at row 1第 1 行的列“(null)”的值超出范围
【发布时间】:2013-10-07 21:40:48
【问题描述】:
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)”的值超出范围

【问题讨论】:

  • 对于任何行来说都是 a.TRANSACTION_DATE NULL。当您尝试将 NULL 转换为数据时,它可能会引发该错误。另外,您使用的是什么 DBMS? MYSQL、ORACLE、MSSQL?
  • 只是疯狂的想法,你使用了别名'a'两次。即使第二个在子查询中,也想知道是否会搞砸。
  • 使用 MYSQL 在 TRANSACTION_DATE 中没有 NULL 值。

标签: mysql sql


【解决方案1】:

您的 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
    

【讨论】:

    猜你喜欢
    • 2021-05-06
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 2015-05-28
    • 2016-09-29
    相关资源
    最近更新 更多