我可以使用它来获得所需的格式:
SELECT TO_CHAR(12345,'99G999') "Amount" FROM DUAL;
SELECT TO_CHAR(123456,'999G999') "Amount" FROM DUAL;
SELECT TO_CHAR(1234567,'9G999G999') "Amount" FROM DUAL;
Run Code Online (Sandbox Code Playgroud)
有没有一种方法,您不必像这样检查长度?:
select case
when length(my_number) = 5 then TO_CHAR(my_number,'99G999')
when length(my_number) = 6 then TO_CHAR(my_number,'999G999')
Run Code Online (Sandbox Code Playgroud)
在模型中使用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
Run Code Online (Sandbox Code Playgroud)
您只需要足够的9s (和Gs)来满足您期望处理的最长值。
如果您不想要前导空格 - 包括所有这些空格中作为负值的潜在减号的占位符 - 您可以添加FM“填充模式”格式模型修饰符:
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
Run Code Online (Sandbox Code Playgroud)