首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不带逗号、小数或负号11位前导零的和量字段

不带逗号、小数或负号11位前导零的和量字段
EN

Stack Overflow用户
提问于 2017-10-03 16:31:48
回答 1查看 275关注 0票数 0

下面的选择要求:

  1. 美元金额字段11个字符,带前导零
  2. 无逗号、小数或负号
  3. 当前导为零时,替换十进制、逗号和负号,我会收到varchar不用于求和的错误。当转换为数字时,所有逗号、小数和负号都会显示出来。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-03 22:12:22

在MySQL中,请尝试如下:

代码语言:javascript
复制
LPAD(FLOOR(ABS(AMOUNT)*100),11,'0')

但是,您的SQL看起来像是TSQL ( MySQL ),而不是MySQL,请参阅此SQL Fiddle

假设您确实想要TSQL,那么尝试如下:

代码语言:javascript
复制
RIGHT(CONCAT('00000000000',CAST(ABS([AMOUNT])*100 AS INT)),11) AS LEADZERO
  1. ABS()移除减号
  2. *100将在结果转换为整数后删除2个小数。
  3. CONCAT()将0字符串放在整数前面
  4. RIGHT(...,7)只需要输出所需字符串的7个字符

或者,您可以使用floor()代替cast()

代码语言:javascript
复制
RIGHT(CONCAT('00000000000',floor(ABS([AMOUNT])*100)),11) AS LEADZERO

代码语言:javascript
复制
CREATE TABLE psg_postingtransactions
    ([AMOUNT] decimal(11,2))
;

INSERT INTO psg_postingtransactions
    ([AMOUNT])
VALUES
    (0),
    (123.45),
    (45678.1),
    (-12.56)
;

查询1

代码语言:javascript
复制
SELECT
   RIGHT(CONCAT('00000000000',cast(ABS([AMOUNT])*100 AS INT)),7) AS LEADZERO
FROM psg_postingtransactions

结果

代码语言:javascript
复制
|   LEADZERO   |
|--------------|
|  00000000000 |
|  00000012345 |
|  00004567810 |
|  00000001256 |
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46549356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档