正则表达式不处理chr(10)字符

时间:2018-03-22 19:00:50

标签: oracle

Line1
Line2

输出

SELECT
    REGEXP_SUBSTR (
        str,
        '(.*?)(~-delim~-|$)',
        1,
        LEVEL,
        NULL,
        1
    ) output
FROM (
    SELECT 'Line1'||chr(10)||'~-delim~-Line2' AS str FROM DUAL
)
CONNECT BY LEVEL <= REGEXP_COUNT (str, '~-delim~-') + 1
Line2

输出

Line1

Line2

为什么换行会导致字符串受损?我希望输出为:

SELECT *

FROM ParkingSession

JOIN Customer ON ParkingSession.CustID = Customer.CustID

WHERE Customer.Registration = "BH34 JHN"

ORDER BY (TIME(DateTimeStart) + Hours) ASC;

1 个答案:

答案 0 :(得分:3)

默认情况下,Oracle regexp引擎与通配符.与换行符(chr(10))不匹配。

您可以使用regexp_substr的第五个参数来更改该行为。目前您已为其指定了null。将其更改为'n'(包括单引号),然后重试。你会得到你需要的东西。

然后查看REGEXP_SUBSTR的文档,特别是第五个参数 - 您将看到其他可用选项。你现在可能不需要它们,但也许你将来需要时记住它们。