【问题标题】:Cast and Convert decimal to a zero in left in T-SQL在 T-SQL 中将十进制转换为左侧的零
【发布时间】:2016-02-23 11:15:55
【问题描述】:

假设我有这个 SELECT 语句

SELECT TOP 1 CAST(G.ACCOUNTINGCURRENCYAMOUNT AS decimal(15,2) )
FROM MicrosoftDynamicsAx.dbo.GENERALJOURNALACCOUNTENTRY G

我得到了结果:-372263.29。所以我想得到-00000000372263.29

如何在左侧填充零? 提前致谢

【问题讨论】:

  • SELECT RIGHT('000000000000000000000'+cast (@Var AS NVARCHAR(100)),15)
  • 请看我的问题更新
  • 搜索“Leading zeros SQL”,你会得到几十个结果/答案

标签: sql sql-server tsql decimal


【解决方案1】:

您将无法存储前导零的数字,您需要将其存储为 varchar。因此,当您想要前导零时,您可以在以下选项中做出选择:

  • 将值作为数字存储在表中,然后将结果选择为 varchar 以显示前导零。
  • 以 varchar 形式存储在表中,然后在您想要进行计算时转换为数字。

在上面看起来你在表中有一个数值并且想要提取一个固定长度的字符串。试试:

SELECT TOP 1
     CASE 
         WHEN CAST(G.ACCOUNTINGCURRENCYAMOUNT AS decimal(15,2) >= 0 THEN
             RIGHT('000000000000000000000' + CAST(CAST(G.ACCOUNTINGCURRENCYAMOUNT AS decimal(15,2)) AS VARCHAR), 15)
         ELSE 
             '-' + RIGHT('000000000000000000000' + CAST(-1 * CAST(G.ACCOUNTINGCURRENCYAMOUNT AS decimal(15,2)) AS VARCHAR), 15)
    END
FROM 
     MicrosoftDynamicsAx.dbo.GENERALJOURNALACCOUNTENTRY G

【讨论】:

  • 感谢您的回复,我也收到00000-372263.29 我检查第二个条件不起作用
  • 是的,现在我得到 000000372263.29 但我想要 -000000372263.29 我不想更改默认值
  • 终于搞定了,现在试试运行?另一个答案不会让你得到我认为不正确的东西,因为它不考虑负数。
【解决方案2】:

关键思想是需要将输出转换为字符串以将0s放在前面。如果你不喜欢输入长长的 0 字符串,可以使用str()replace()

SELECT TOP 1 REPLACE(STR(G.ACCOUNTINGCURRENCYAMOUNT, 15, 2), ' ', '0')
FROM MicrosoftDynamicsAx.dbo.GENERALJOURNALACCOUNTENTRY G;

编辑:

处理负数。 . .

SELECT TOP 1 (CASE WHEN G.ACCOUNTINGCURRENCYAMOUNT >= 0
                   THEN REPLACE(STR(G.ACCOUNTINGCURRENCYAMOUNT, 15, 2), ' ', '0')
                   THEN '-' + REPLACE(STR(ABS(G.ACCOUNTINGCURRENCYAMOUNT), 14, 2), ' ', '0')
              END)
FROM MicrosoftDynamicsAx.dbo.GENERALJOURNALACCOUNTENTRY G;

【讨论】:

  • 我喜欢这个,结果我有00000-372263.29,但我应该编辑它以获得-00000372263.20
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
  • 2019-06-12
相关资源
最近更新 更多