pingcap / pingcap/tidb

insert 语句中间结果报错 1292 - Truncated incorrect DECIMAL

Open
#39,235 0 comments 0 reactions 0 assignees View on GitHub
severity/minor sig/execution type/bug
Dominant language
Go
Stars
40.5k
Forks
6.2k
PR merge metrics
PR metrics pending

Description

# 1. 报错信息
```
1292 - Truncated incorrect DECIMAL value: '-237141453587819371373.322233045883214006350133'
```

# 2. 问题重现

## 2.1 创建测试表
```sql
CREATE TABLE `t_tbl02` (
`贷款` decimal(40,2) DEFAULT NULL COMMENT '贷款'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

CREATE TABLE `t_test` (
`企业名称` varchar(255) DEFAULT NULL,
`信用代码` varchar(255) DEFAULT NULL,
`年度` int(11) DEFAULT NULL,
`yysr_2_ago` decimal(20,2) DEFAULT NULL,
`yysr_1_ago` decimal(20,2) DEFAULT NULL,
`yysr_current` decimal(20,2) DEFAULT NULL,
`ldzc_1_ago` decimal(20,2) DEFAULT NULL,
`ldzc_2_ago` decimal(20,2) DEFAULT NULL,
`ldfz_1_ago` decimal(20,2) DEFAULT NULL,
`ldfz_2_ago` decimal(20,2) DEFAULT NULL,
`syzqy_1_ago` decimal(20,2) DEFAULT NULL,
`gdzc_1_ago` decimal(20,2) DEFAULT NULL,
`gdzc_2_ago` decimal(20,2) DEFAULT NULL,
`wxzc_1_ago` decimal(20,2) DEFAULT NULL,
`wxzc_2_ago` decimal(20,2) DEFAULT NULL,
`cqjk_1_ago` decimal(20,2) DEFAULT NULL,
`ch_1_ago` decimal(20,2) DEFAULT NULL,
`ch_2_ago` decimal(20,2) DEFAULT NULL,
`yszk_1_ago` decimal(20,2) DEFAULT NULL,
`yszk_2_ago` decimal(20,2) DEFAULT NULL,
`yfzk_1_ago` decimal(20,2) DEFAULT NULL,
`yfzk_2_ago` decimal(20,2) DEFAULT NULL,
`ljzj_1_ago` decimal(20,2) DEFAULT NULL,
`dqjk_1_ago` decimal(20,2) DEFAULT NULL,
`lrze_1_ago` decimal(20,2) DEFAULT NULL,
`jlr_1_ago` decimal(20,2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
```

## 2.2 插入测试数据

```sql
INSERT INTO `t_test` (`企业名称`, `信用代码`, `年度`, `yysr_2_ago`, `yysr_1_ago`, `yysr_current`, `ldzc_1_ago`, `ldzc_2_ago`, `ldfz_1_ago`, `ldfz_2_ago`, `syzqy_1_ago`, `gdzc_1_ago`, `gdzc_2_ago`, `wxzc_1_ago`, `wxzc_2_ago`, `cqjk_1_ago`, `ch_1_ago`, `ch_2_ago`, `yszk_1_ago`, `yszk_2_ago`, `yfzk_1_ago`, `yfzk_2_ago`, `ljzj_1_ago`, `dqjk_1_ago`, `lrze_1_ago`, `jlr_1_ago`) VALUES ('PingCapTiDB', '91210102555343453T', 2017, 0.00, 0.00, 0.00, 2857907.48, 0.00, 11677684.98, 0.00, -8623888.37, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2726700.50, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00);
INSERT INTO `t_test` (`企业名称`, `信用代码`, `年度`, `yysr_2_ago`, `yysr_1_ago`, `yysr_current`, `ldzc_1_ago`, `ldzc_2_ago`, `ldfz_1_ago`, `ldfz_2_ago`, `syzqy_1_ago`, `gdzc_1_ago`, `gdzc_2_ago`, `wxzc_1_ago`, `wxzc_2_ago`, `cqjk_1_ago`, `ch_1_ago`, `ch_2_ago`, `yszk_1_ago`, `yszk_2_ago`, `yfzk_1_ago`, `yfzk_2_ago`, `ljzj_1_ago`, `dqjk_1_ago`, `lrze_1_ago`, `jlr_1_ago`) VALUES ('PingCapTiDB', '91210102555343453T', 2018, 0.00, -0.01, 23300.97, 2992987.08, 2857907.48, 11742867.69, 11677684.98, -8739739.48, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2726700.50, 2726700.50, 0.00, 0.00, 0.00, 0.00, -115851.11, -115851.11);
INSERT INTO `t_test` (`企业名称`, `信用代码`, `年度`, `yysr_2_ago`, `yysr_1_ago`, `yysr_current`, `ldzc_1_ago`, `ldzc_2_ago`, `ldfz_1_ago`, `ldfz_2_ago`, `syzqy_1_ago`, `gdzc_1_ago`, `gdzc_2_ago`, `wxzc_1_ago`, `wxzc_2_ago`, `cqjk_1_ago`, `ch_1_ago`, `ch_2_ago`, `yszk_1_ago`, `yszk_2_ago`, `yfzk_1_ago`, `yfzk_2_ago`, `ljzj_1_ago`, `dqjk_1_ago`, `lrze_1_ago`, `jlr_1_ago`) VALUES ('PingCapTiDB', '91210102555343453T', 2019, -0.01, 23300.97, 9265462.04, 2694362.03, 2992987.08, 13684986.55, 11742867.69, -10980483.39, 10141.13, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2579575.50, 2726700.50, 0.00, 0.00, 0.00, 0.00, -2240743.91, -2240743.91);
INSERT INTO `t_test` (`企业名称`, `信用代码`, `年度`, `yysr_2_ago`, `yysr_1_ago`, `yysr_current`, `ldzc_1_ago`, `ldzc_2_ago`, `ldfz_1_ago`, `ldfz_2_ago`, `syzqy_1_ago`, `gdzc_1_ago`, `gdzc_2_ago`, `wxzc_1_ago`, `wxzc_2_ago`, `cqjk_1_ago`, `ch_1_ago`, `ch_2_ago`, `yszk_1_ago`, `yszk_2_ago`, `yfzk_1_ago`, `yfzk_2_ago`, `ljzj_1_ago`, `dqjk_1_ago`, `lrze_1_ago`, `jlr_1_ago`) VALUES ('PingCapTiDB', '91210102555343453T', 2020, 23300.97, 9265462.04, 14023278.00, 9336012.96, 2694362.03, 18636168.47, 13684986.55, -9290014.38, 10141.13, 10141.13, 0.00, 0.00, 0.00, 0.00, 0.00, 9103051.50, 2579575.50, 0.00, 0.00, 0.00, 0.00, 1690469.01, 1690469.01);
```

## 2.3 问题 SQL

```sql
insert into t_tbl02(
贷款
)
SELECT
CAST(xq1 AS DECIMAL(40,2)) 贷款
FROM
(
SELECT
企业名称,
信用代码,
年度,
CASE WHEN yysr_1_ago != 0 AND ldzc_1_ago+ldzc_2_ago-ldfz_1_ago-ldfz_2_ago != 0 THEN ROUND(yysr_1_ago*1.000*(1-lrze_1_ago*1.000/yysr_1_ago)*yysr_current/yysr_1_ago/(yysr_1_ago*2.000/(ldzc_1_ago+ldzc_2_ago-ldfz_1_ago-ldfz_2_ago)) - syzqy_1_ago+gdzc_1_ago+wxzc_1_ago-cqjk_1_ago - dqjk_1_ago,2) ELSE NULL END xq1
,yysr_current 指数平滑预测值
,gdzc_1_ago-gdzc_2_ago+ch_1_ago-ch_2_ago+yszk_1_ago-yszk_2_ago-yfzk_1_ago+yfzk_2_ago-ljzj_1_ago-jlr_1_ago xq2
,gdzc_1_ago-gdzc_2_ago+wxzc_1_ago-wxzc_2_ago xq3
,CASE WHEN (CASE WHEN yysr_1_ago != 0 AND ldzc_1_ago+ldzc_2_ago-ldfz_1_ago-ldfz_2_ago != 0 THEN yysr_1_ago*1.000*(1-lrze_1_ago*1.000/yysr_1_ago)*yysr_current/yysr_1_ago/(yysr_1_ago*2.000/(ldzc_1_ago+ldzc_2_ago-ldfz_1_ago-ldfz_2_ago)) - syzqy_1_ago+gdzc_1_ago+wxzc_1_ago-cqjk_1_ago - dqjk_1_ago ELSE NULL END) > 0 THEN 1 ELSE 0 END xqpg1
,CASE WHEN gdzc_1_ago-gdzc_2_ago+ch_1_ago-ch_2_ago+yszk_1_ago-yszk_2_ago-yfzk_1_ago+yfzk_2_ago-ljzj_1_ago-jlr_1_ago > 0 THEN 1 ELSE 0 END xqpg2
,CASE WHEN gdzc_1_ago-gdzc_2_ago+wxzc_1_ago-wxzc_2_ago > 0 THEN 1 ELSE 0 END xqpg3
FROM t_test F
) G WHERE 企业名称 = 'PingCapTiDB' AND 年度= 2018
```

## 2.4 报错的数值

```
yysr_1_ago*1.000*(1-lrze_1_ago*1.000/yysr_1_ago)*yysr_current/yysr_1_ago/(yysr_1_ago*2.000/(ldzc_1_ago+ldzc_2_ago-ldfz_1_ago-ldfz_2_ago))
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.