下面选择要求:
- 美元金额字段 11 个字符,带前导零
- 不能有逗号、小数点或负号
- 当前导零、REPLACE 小数、逗号和负号起作用时,我收到一条错误,指出 varchar 未用于 SUM。当 CAST as Numeric 时,所有逗号、小数和负号都会显示。
当 psg_postingtransactions.[AMOUNT] != 0 THEN CAST(REPLACE(REPLACE(REPLICATE('0',12-LEN(RTRIM(psg_postingtransactions [AMOUNT]))))+RTRIM(psg_postingtransactions.[AMOUNT] 时的情况),'.',''), '-', '0') AS NUMERIC) ELSE '00000000000' END
最佳答案
在 MySQL 中试试这个:
LPAD(FLOOR(ABS(AMOUNT)*100),11,'0')
但是您的 SQL 看起来像是 TSQL (MS SQL Server) 而不是 MySQL,请参阅此 SQL Fiddle
假设您确实需要 TSQL,请尝试以下操作:
RIGHT(CONCAT('00000000000',CAST(ABS([AMOUNT])*100 AS INT)),11) AS LEADZERO
- ABS() 删除减号
- 一旦结果转换为整数,*100 将删除 2 位小数
- CONCAT() 将一串零放在整数前面
- RIGHT(...,7) 仅需要输出所需字符串的 7 个字符
或者,您可以使用Floor()代替cast()
RIGHT(CONCAT('00000000000',floor(ABS([AMOUNT])*100)),11) AS LEADZERO
.
CREATE TABLE psg_postingtransactions
([AMOUNT] decimal(11,2))
;
INSERT INTO psg_postingtransactions
([AMOUNT])
VALUES
(0),
(123.45),
(45678.1),
(-12.56)
;
查询 1:
SELECT
RIGHT(CONCAT('00000000000',cast(ABS([AMOUNT])*100 AS INT)),7) AS LEADZERO
FROM psg_postingtransactions
| LEADZERO |
|--------------|
| 00000000000 |
| 00000012345 |
| 00004567810 |
| 00000001256 |
关于mysql - SUM 金额字段不包含逗号、小数或负号 11 位前导零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46549356/