特定表中所有列的oracle sql Col格式编号

f0ofjuux  于 2023-06-29  发布在  Oracle
关注(0)|答案(2)|浏览(140)

我有一个问题,我想格式化所有列在输出我的选择不是一个接一个
例如,我想这样做:
这是我的正常输出:

name1 name 2 salary1 salary2 salary3 finances manager  senior_manager
----  ------ ------- ------  ------- -------- -------  -------------
3000  400000 8000000  90      99999  500000   4000000  900000000000
1000  100000 9000000  90      100000 900000   1000000  800000000000
4000  300000 7000000  90      99999  400200   1000000  500000000000

这就是我想做的:

name1 name 2 salary1 salary2 salary3 finances   manager  employee4
----  ------ ------- ------  ------- --------   -------  -------------
3,000  40,0000 8,000,000  90  99,999  500,000  4,000,000  9,000
1,000  10,0000 9,000,000  90  100,000 900,000  1,000,000  8,000
4,000  30,0000 7,000,000  90  99,999  400,200  1,000,000  5,000

所以解决方案是;

select name1, name2 , salary1, salary2, salary3, finances, manager, employee4 from database_table

col name1 format 999,999.99
col name2 format 999,999.99
col salary1 format 999,999.99
col Salary2 format 999,999.99
col Salary3 format 999,999.99
col Finances format 999,999.99
col Manager format 999,999.99
col Emlpoyee4 format 999,999.99

order by 1;

我想做的是:col * format 999,999.99还是col all_columns format 999,999.99
我的问题是,如何选择所有列,而不是一个接一个?

oiopk7p5

oiopk7p51#

当您使用SQL*Plus时,是的-有一种方法可以做到这一点-使用SET NUMFORMAT
例如:

之前

SQL> with test as
  2    (select 3000 name1, 400000 name2, 8000000 salary1, 90 salary2, 9999 salary3 from dual)
  3  select * from test;

     NAME1      NAME2    SALARY1    SALARY2    SALARY3
---------- ---------- ---------- ---------- ----------
      3000     400000    8000000         90       9999

设置

SQL> set numformat 999G999G990

SQL> /

       NAME1        NAME2      SALARY1      SALARY2      SALARY3
------------ ------------ ------------ ------------ ------------
       3,000      400,000    8,000,000           90        9,999

SQL>
mefy6pfw

mefy6pfw2#

您可以使用to_char来实现这一点
如果你不想要结果中的最后一个dor,你可以删除它。

SELECT 
    TO_CHAR(8000000 , 'fm999G999G999D99')
FROM DUAL;
TO_CHAR(8000000,'FM999G999G999D99')
8,000,000.
SELECT 
    regexp_replace(TO_CHAR(8000000 , 'fm999G999G999D99'), '\.$', '')
FROM DUAL;
REGEXP_REPLACE(TO_CHAR(8000000,'FM999G999G999D99'),'.$','')
8,000,000

fiddle

相关问题