ORACLE TO_CHAR指定输出数据类型



我有一个数据为'123456789012'的列。我想把数据中的每3个字符用'/'隔开,这样输出就像:"123/456/789/012">

SELECT TO_CHAR(DATA, '999/999/999/999') FROM TABLE 1"但是它没有打印出我想要的输出。之前我从表1中执行了SELECT TO_CHAR(DATA, '$999,999,999,999.99'),输出结果为$123,456,789,012.00"所以我想我也可以在其他情况下做同样的事情,但我想情况并非如此。

还有一种情况,我也想把'#'放在数据前面,所以输出将是这样的:#12345678901234。我也可以使用TO_CHAR来解决这个问题吗?

这些可能吗?因为当我浏览oracle关于TO_CHAR的文档时,它说明了一些可以用于TO_CHAR函数的格式,而我想要的格式没有列出。

提前谢谢你。: D

这里有一个varchar2数据类型的选项:

with test as (
select '123456789012' a from dual
)
select listagg(substr(a,(level-1)*3+1,3),'/') within group (order by rownum) num
from test
connect by level <=length(a)

with test as (
select '123456789012.23' a from dual
)
select '$'||listagg(substr((regexp_substr(a,'[0-9]{1,}')),(level-1)*3+1,3),',') within group (order by rownum)||regexp_substr(a,'[.][0-9]{1,}') num
from test
connect by level <=length(a)

输出:

1号查询

123/456/789/012

2号查询

$123,456,789,012.23

如果你想要三个组,那么你可以使用组分隔符G,并指定要使用的字符:

SELECT TO_CHAR(DATA, 'FM999G999G999G999', 'NLS_NUMERIC_CHARACTERS=./') FROM TABLE_1
123/456/789/012

如果你想要一个前导#,那么你可以使用货币指示符L,并再次指定要使用的字符:

SELECT TO_CHAR(DATA, 'FML999999999999', 'NLS_CURRENCY=#') FROM TABLE_1
#123456789012

或两者合并:

SELECT TO_CHAR(DATA, 'FML999G999G999G999', 'NLS_CURRENCY=# NLS_NUMERIC_CHARACTERS=./') FROM TABLE_1
#123/456/789/012

,db&lt的在小提琴

数据类型总是字符串;只有格式改变。

最新更新