select DECODE('''||v_month||''',''0'',''0'',regexp_substr('''||v_month||''',''[^,]+'', 1, level))
from dual
connect BY regexp_substr('''||v_month||''', ''[^,]+'', 1, level) is not null
字符串
我试过使用chatgpt和https://www.sqlines.com/online来转换它,但它不能像预期的那样转换它。
1条答案
按热度按时间nnvyjq4y1#
您的代码不是有效的SQL,因为
''0''
和''[^,]+''
不是有效的字符串文字。您需要'0'
和'[^,]+'
或'''0'''
和'''[^,]+'''
。一旦你修复它,你就会得到:
字符串
而
'''||v_month||'''
是一个字符串字面量;它没有在变量前加上一个单引号,所以你的查询可以简化为:型
在PostgreSQL中,这将是:
型
如果你确实想递归遍历一个逗号分隔的字符串,那么在Oracle中,你可以使用递归查询和简单的字符串函数:
型
PostgreSQL有一个
string_to_array
函数,它会自动执行,然后你可以用unnest
来转换为行:型
Oracle fiddlePostgreSQL fiddle的数据库