文章目錄
- 異常
- 原因分析
- 1、數據類型不一致
- 2、數據長度超長
- 3、數據格式要正確
- 處理方案
- 模擬案例
- 創建表
- 數據查詢
異常
在執行MySQL的語句時,在控制臺報錯如下所示。
Data truncation: Truncated incorrect INTEGER value
原因分析
1、數據類型不一致
必須要保證數據類型一致,使用CAST函數進行類型轉換,源數據類型不能為字母等不可轉換的類型,比如CAST(‘ABC’ AS INTEGER)
2、數據長度超長
數據長度要滿足 integer 類型的最大長度
3、數據格式要正確
若源類型要滿足要求,如使用decimal轉換int,就可能報錯
處理方案
修改數據庫的字段類型 為int
模擬案例
創建表
訂單明細表 tb_order_info
CREATE TABLE `tb_order_info` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '訂單id',`business_date` date DEFAULT NULL COMMENT '業務日期',`order_no` bigint(20) DEFAULT NULL COMMENT '訂單號',`send_id` varchar(32) DEFAULT NULL COMMENT '推送ID',`order_type` varchar(8) DEFAULT NULL COMMENT '訂單類型:PAY-支付,REFUND-退款',`sku_num` bigint(20) NOT NULL COMMENT '商品數量',`total_amount` bigint(20) NOT NULL COMMENT '支付金額:單位分',`is_enable` varchar(10) DEFAULT NULL COMMENT '是否有效:1-有效',`created_user` varchar(20) DEFAULT NULL COMMENT '創建人',`created_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '創建時間',PRIMARY KEY (`id`) USING BTREE,KEY `indx_order_type` (`order_type`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='訂單銷量統計表'
測試數據如下所示。
數據查詢
查詢并插入
insert into tb_order_sum (`business_date`, `orderCount`, `totalAmount`)
SELECTbusiness_date,count(DISTINCT CASE WHEN order_type = 'PAY' THEN order_no WHEN order_type = 'REFUND' THEN send_id END ) AS orderCount,sum( CASE WHEN order_type = 'PAY' THEN total_amount WHEN order_type = 'REFUND' THEN total_amount * ( - 1 ) END ) as totalAmount
FROMtb_order_info
GROUP BYbusiness_date;