SUM金额字段没有逗号,小数,也没有负号11位前导零

时间:2017-10-03 16:31:48

标签: mysql

以下选择要求:

  1. 美元金额字段11个字符,带前导零
  2. 没有逗号,小数,也没有负号
  3. 当前导零,REPLACE十进制,逗号和负号正在工作时,我收到varchar不习惯SUM的错误。当CAST为Numeric时,显示所有逗号,小数和负号。
  4. 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

1 个答案:

答案 0 :(得分:0)

在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
  1. ABS()删除减号
  2. * 100将结果转换为整数
  3. 后删除2位小数
  4. CONCAT()将零字符串放在整数
  5. 前面
  6. RIGHT(...,7)只需要输出所需字符串的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
    

    <强> Results

    |   LEADZERO   |
    |--------------|
    |  00000000000 |
    |  00000012345 |
    |  00004567810 |
    |  00000001256 |