我可以使用它来获取所需的格式:
SELECT TO_CHAR(12345,'99G999') "Amount" FROM DUAL;
SELECT TO_CHAR(123456,'999G999') "Amount" FROM DUAL;
SELECT TO_CHAR(1234567,'9G999G999') "Amount" FROM DUAL;
有没有一种不必像这样检查长度的方法?:
select case
when length(my_number) = 5 then TO_CHAR(my_number,'99G999')
when length(my_number) = 6 then TO_CHAR(my_number,'999G999')
答案 0 :(得分:1)
在模型中使用9
(而不是0
)意味着您不会得到前导零,因此可以对所有这些使用相同的模型:
SELECT TO_CHAR(12345,'9G999G999') "Amount" FROM DUAL;
Amount
----------
12,345
SELECT TO_CHAR(123456,'9G999G999') "Amount" FROM DUAL;
Amount
----------
123,456
SELECT TO_CHAR(1234567,'9G999G999') "Amount" FROM DUAL;
Amount
----------
1,234,567
您只需要足够的9
s(和G
s)即可获得期望的最长价值。
如果您不希望前导空格-包括所有空格中的空格作为负值的负号的占位符-您可以添加FM
'填充模式'{{3 }}:
SELECT TO_CHAR(12345,'FM999G999G999G999') "Amount" FROM DUAL;
Amount
----------------
12,345
SELECT TO_CHAR(123456,'FM999G999G999G999') "Amount" FROM DUAL;
Amount
----------------
123,456
SELECT TO_CHAR(1234567,'FM999G999G999G999') "Amount" FROM DUAL;
Amount
----------------
1,234,567