我陷入了一个问题,我需要确保字符串分裂,这将保证分裂字符串的顺序,它通过。示例:string=“a,b,c,d,e”分割后的预期保证订单结果:请参阅所附图片的结果。我看到许多ans会给我的字符串分裂,但正如我们所知,临时表不会保证字符串的顺序。我需要这两个sql 2012或更高版本,甲骨文10g应该是工作。
3qpi33ja1#
对于SQLServer和oracle,您找不到一个查询可以同时执行此操作,因为除其他许多原因外,它们的字符串解析函数具有不同的名称。对于甲骨文来说,这个问题有很多解决方案;然而,它们大多不会在oracle10g上工作,因为它们依赖于11g或12c中引入的改进。这个答案应该能够适应[希望]使它在oracle10g中工作(但我没有地方测试它,因为oracle10g现在非常旧,您应该真的希望升级到一个更新的版本):
SELECT t.value, v.COLUMN_VALUE AS itemFROM table_name t CROSS JOIN TABLE( CAST( MULTISET( SELECT REGEXP_SUBSTR( t.value, '[^,]+', 1, LEVEL ) FROM DUAL CONNECT BY REGEXP_SUBSTR( t.value, '[^,]+', 1, LEVEL ) IS NOT NULL ) AS SYS.ODCIVARCHAR2LIST ) ) v
SELECT t.value,
v.COLUMN_VALUE AS item
FROM table_name t
CROSS JOIN TABLE(
CAST(
MULTISET(
SELECT REGEXP_SUBSTR( t.value, '[^,]+', 1, LEVEL )
FROM DUAL
CONNECT BY REGEXP_SUBSTR( t.value, '[^,]+', 1, LEVEL ) IS NOT NULL
)
AS SYS.ODCIVARCHAR2LIST
) v
对于样本数据:
CREATE TABLE TABLE_NAME ( value ) ASSELECT 'a,b,c,d,e' FROM DUAL;
CREATE TABLE TABLE_NAME ( value ) AS
SELECT 'a,b,c,d,e' FROM DUAL;
输出:价值项目A、b、c、d、eaa、b、c、d、eba、b、c、d、eca、b、c、d、eda、b、c、d、eedb<>在这里摆弄
1条答案
按热度按时间3qpi33ja1#
对于SQLServer和oracle,您找不到一个查询可以同时执行此操作,因为除其他许多原因外,它们的字符串解析函数具有不同的名称。
对于甲骨文来说,这个问题有很多解决方案;然而,它们大多不会在oracle10g上工作,因为它们依赖于11g或12c中引入的改进。这个答案应该能够适应[希望]使它在oracle10g中工作(但我没有地方测试它,因为oracle10g现在非常旧,您应该真的希望升级到一个更新的版本):
对于样本数据:
输出:
价值项目A、b、c、d、eaa、b、c、d、eba、b、c、d、eca、b、c、d、eda、b、c、d、ee
db<>在这里摆弄