【发布时间】:2021-08-25 09:55:00
【问题描述】:
我正在尝试将以模式“NEW”结尾的行设置为 null。
这将是我想要的输出(输入只是第一列):
DCALIVE DESIRED_OUTPUT
--------------------------------------
DCA_LIVE_NEW NULL
DCA_LIVE_NEWS DCA_LIVE_NEWS
DCA_LIVE_NO_RECALL DCA_LIVE_NO_RECALL
DCA_LIVE DCA_LIVE DCA_LIVE DCA_LIVE
到目前为止,我已经尝试了其他答案中建议的否定环视,但它不会返回任何行的值
WITH aux ( dcalive ) AS (
SELECT
'DCA_LIVE_NEW'
FROM
dual
UNION ALL
SELECT
'DCA_LIVE_NEWS'
FROM
dual
UNION ALL
SELECT
'DCA_LIVE_NO_RECALL'
FROM
dual
UNION ALL
SELECT
'DCA_LIVE'
FROM
dual
)
SELECT
a.*,
decode(regexp_substr(dcalive, '(?!NEW)$'), NULL, NULL, dcalive) desired_output
FROM
aux a;
【问题讨论】:
-
(?!NEW)$是匹配任何字符串的错误正则表达式模式。您打算使用(?<!NEW)$,但 Oracle 正则表达式无论如何都不支持环视。 -
我也试过 [^(NEW)]$,但没有运气:(
-
你的第一句话和样本数据正好相反。
-
@GordonLinoff 你是什么意思?
-
@banana_99 。 . . “我正在尝试将不以模式‘NEW’结尾的行设置为空。”您正在设置
NULL以'NEW'结尾的行。