oracle 使用to_char在xmltable中转换数字或日期

5jdjgkvh  于 2023-11-17  发布在  Oracle
关注(0)|答案(2)|浏览(135)

我有这样的查询:

select to_number(column_value) as IDs from xmltable('1,2,3,4,12.33,testtest');

字符串
是否可以使用to_char函数将xmltable中的数字和字符串转换为行?所以我的输出将是这样的:
| 输出|
| --|
| 1 |
| 2 |
| 3 |
| 4 |
| 十二,三十三|
| 测试测试|

h7wcgrx3

h7wcgrx31#

使用您当前的值列表,您将获得:

select to_number(column_value) as IDs from xmltable('1,2,3,4,12.33,testtest');

个字符
它只适用于数值:

select to_number(column_value) as IDs from xmltable('1,2,3,4,12.33');


| IDs|
| --|
| 1 |
| 2 |
| 3 |
| 4 |
| 十二点三十三分|
如果字符串值看起来像一个标识符,也就是说,如果你能够在你的值列表中用双引号将它括起来,它就可以工作了:

select to_number(column_value) as IDs from xmltable('1,2,3,4,12.33,"testtest"');
ORA-01722: unable to convert string value containing 't' to a number:

的字符串
.当然,你不能将字符串'testtest'转换为数字。
但是你可以把它们都当作字符串:

select column_value as IDs from xmltable('1,2,3,4,12.33,"testtest"');


| IDs|
| --|
| 1 |
| 2 |
| 3 |
| 4 |
| 十二点三十三分|
| 测试测试|
fiddle
如果你正在处理一个传递给你的值列表,那么在字符串周围添加双引号是可行的,但可能不值得这样做,而普通的分层查询或递归CTE方法将CSV列表拆分为值可能更合适。

bkkx9g8r

bkkx9g8r2#

我不确定xmltable。但是,如果你可以提取字符串,你可以使用REGEXP_SUBSTRLEVEL。下面是sample code

SELECT REGEXP_SUBSTR('1,2,3,4,12.33,testtest', '[^,]+', 1, LEVEL) AS IDs
FROM dual
CONNECT BY REGEXP_SUBSTR('1,2,3,4,12.33,testtest', '[^,]+', 1, LEVEL) IS NOT NULL;

字符串
以下是示例输出:


的数据

相关问题