apex_string.split 新行作为分隔符

apex_string.split new line as delimiter

我正在使用此查询拆分我的 SQL 查询中的文本区域字段字符串:

select * from "MyTable" a 
where NAME in (select * from 
TABLE(apex_string.split(:P23_TEXTAREA, ',')))

它可以工作,但我想用换行符而不是逗号来拆分字符串。我已经尝试过“\n”、“\r\n”、“
”,但没有成功。如果我删除定界符并使用默认值,则字符串只会用新行拆分一次。如何用多个换行分隔的条目拆分我的字符串?

你可以试试CHR函数:

SELECT *
FROM   TABLE(apex_string.split(:P23_TEXTAREA, CHR(10)))

或包含换行符的字符串文字:

SELECT *
FROM   TABLE(apex_string.split(:P23_TEXTAREA, '
'))

您的 :P23_TEXTAREA 值为:'TRI_1000'||CHR(13)||CHR(10)||'TRI_10',如果您将其拆分为 CHR(10) (LF),您将得到值 'TRI_1000'||CHR(13)'TRI_10'第二个可能会匹配,但第一个不会匹配,因为尾随回车 return (CR) 字符。

看来您需要 trim 结果或拆分 CR/LF(或可选的 CR)而不仅仅是 LF:

SELECT *
FROM   "MyTable"
WHERE  name IN (SELECT * 
                FROM   TABLE(apex_string.split(:P23_TEXTAREA, '\r?\n'))
               )

或:

SELECT *
FROM   "MyTable"
WHERE  name IN (SELECT RTRIM(COLUMN_VALUE, CHR(13)) 
                FROM   TABLE(apex_string.split(:P23_TEXTAREA, CHR(10)))
               )

apex_string.split 的默认分隔符是 LF(换行符),因此一种方法是在将 CR+LF 组合传递给拆分之前将其替换为单个 LF:

select * from "MyTable" a 
where NAME in (select * from 
    TABLE(apex_string.split(
        replace(:P23_TEXTAREA, chr(13)||chr(10), chr(10))
    ))
)