千位分隔符 Oracle

Joh*_*unn 5 sql oracle

我可以使用它来获得所需的格式:

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)

Ale*_*ole 6

在模型中使用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)