以下选择要求:
- 美元金额字段11个字符带领先的零>
- 没有逗号,十进制或负符号
- 领先零时,替换小数,逗号和负符号在起作用时,我会收到一个不用用于总和的错误。当施放数字时,所有逗号,小数和负迹象都显示出来。
CASE WHEN 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()将零的字符串放在整数的前面
- 右(...,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 |