在 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;
假设我有这个 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;