在T-SQL中将十进制转换为零并将其转换为零

时间:2016-02-23 11:15:56

标签: sql sql-server tsql decimal

假设我有这个SELECT语句

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

关键的想法是需要将输出转换为字符串以将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;