mysql - SUM 金额字段不包含逗号、小数或负号 11 位前导零

标签 mysql

下面选择要求:

  1. 美元金额字段 11 个字符,带前导零
  2. 不能有逗号、小数点或负号
  3. 当前导零、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
  1. ABS() 删除减号
  2. 一旦结果转换为整数,*100 将删除 2 位小数
  3. CONCAT() 将一串零放在整数前面
  4. 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

Results:

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

关于mysql - SUM 金额字段不包含逗号、小数或负号 11 位前导零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46549356/

相关文章:

mysql - 忽略 MySQL 查询中锁定的行

mysql查询仅获取段落中的第一句话

javascript - 基于javascript的 echo 下拉

php - mysql_fetch_array 显示问题

php - 绑定(bind) PDO 的参数数量无效

java - JPA合并使用复合键插入新行

Mysql DISTINCT 和 ORDER BY 不起作用

MySQL 查询在备份数据库上有效,但在原始数据库上无效,错误为 : 150

mysql:将数组设置为变量以便在 "IN"子句中使用

php - 我的 PHP 脚本在紧张时给我 500 Internal Server Error