在 T-SQL 中将十进制转换为左边的零

Cast and Convert decimal to a zero in left in T-SQL

假设我有这个 SELECT 声明

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

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

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

您将无法存储带有前导零的数字,您需要将其存储为 varchar。所以当你想要有前导零时,你可以在以下之间做出选择:

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

在上面,您似乎在 table 中有一个数值并且想要提取一个固定长度的字符串。尝试:

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

关键思路是输出需要转成字符串,把0放在前面。如果你不喜欢输入长串的 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;