我有一个数据为'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<的在小提琴
数据类型总是字符串;只有格式改变。