我有这样的查询:
select to_number(column_value) as IDs from xmltable('1,2,3,4,12.33,testtest');
字符串是否可以使用to_char函数将xmltable中的数字和字符串转换为行?所以我的输出将是这样的:| 输出|| --|| 1 || 2 || 3 || 4 || 十二,三十三|| 测试测试|
h7wcgrx31#
使用您当前的值列表,您将获得:
个字符它只适用于数值:
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列表拆分为值可能更合适。
bkkx9g8r2#
我不确定xmltable。但是,如果你可以提取字符串,你可以使用REGEXP_SUBSTR和LEVEL。下面是sample code:
REGEXP_SUBSTR
LEVEL
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;
字符串以下是示例输出:
的数据
2条答案
按热度按时间h7wcgrx31#
使用您当前的值列表,您将获得:
个字符
它只适用于数值:
型
| IDs|
| --|
| 1 |
| 2 |
| 3 |
| 4 |
| 十二点三十三分|
如果字符串值看起来像一个标识符,也就是说,如果你能够在你的值列表中用双引号将它括起来,它就可以工作了:
的字符串
.当然,你不能将字符串'testtest'转换为数字。
但是你可以把它们都当作字符串:
型
| IDs|
| --|
| 1 |
| 2 |
| 3 |
| 4 |
| 十二点三十三分|
| 测试测试|
fiddle
如果你正在处理一个传递给你的值列表,那么在字符串周围添加双引号是可行的,但可能不值得这样做,而普通的分层查询或递归CTE方法将CSV列表拆分为值可能更合适。
bkkx9g8r2#
我不确定xmltable。但是,如果你可以提取字符串,你可以使用
REGEXP_SUBSTR
和LEVEL
。下面是sample code:字符串
以下是示例输出:
的数据