REGEXP_SUBSTR - 如何 "avoid" 括号中的字符串
REGEXP_SUBSTR - how to "avoid" bracket in string
我在数据库 Blanket By-Laws Coverage (Building Only) - Form:G00150
中有以下字符串,我需要 return 只有“G00150”值。
我正在使用这个 REGEXP_SUBSTR(pqb.description 在字符串上方)
SELECT MAX(REGEXP_SUBSTR(pqb.description,'(Blanket By-Laws Coverage (Building Only) - Form:)(.*)',1,1,'i',2)) columnname
FROM tablename [...]
我得到的是空值,我想这是因为字符串中有括号,但我不知道如何避免它。
在 99% 的情况下,描述没有括号,所以这个 REGEXP 可以工作,但事实并非如此,我找不到让它工作的方法
有人能帮忙吗?
谢谢,
迈克尔
将 REGEXP_SUBSTR
与仅围绕表单值的捕获组一起使用:
SELECT MAX(REGEXP_SUBSTR(pqb.description, 'Blanket By-Laws Coverage \(Building Only\) - Form:(\S*)', 1, 1, 'i', 1))
FROM tablename;
请注意,(Building Only)
周围的括号是 字面意思 ,因此,应使用反斜杠对它们进行转义。另请注意,在您当前的查询中,除了表单和值之外,您还有另一个捕获组。您也不需要那个捕获组,所以我已将其删除。
你需要对括号进行转义,还需要第一个子表达式。所以使用以下 regexp
SELECT MAX(REGEXP_SUBSTR(pqb.description,
'Blanket By-Laws Coverage \(Building Only\) - Form:(.*)',
1,1,'i',1) ) columnname
FROM tablename [...]
为什么要担心转义 parens?难道你不想要“Form:
”之后的内容吗?请注意,如果未找到匹配项,REGEXP_REPLACE 将 return 原始字符串,其中 REGEXP_SUBSTR 将 return NULL。
WITH pqb(description) AS (
SELECT 'Blanket By-Laws Coverage (Building Only) - Form:G00150' FROM dual
)
--SELECT REGEXP_SUBSTR(description, '.*Form:(.*)', 1, 1, NULL, 1) AS Form
SELECT REGEXP_REPLACE(description, '.*Form:(.*)', '') AS Form
from pqb;
FORM
------
G00150
1 row selected.
我在数据库 Blanket By-Laws Coverage (Building Only) - Form:G00150
中有以下字符串,我需要 return 只有“G00150”值。
我正在使用这个 REGEXP_SUBSTR(pqb.description 在字符串上方)
SELECT MAX(REGEXP_SUBSTR(pqb.description,'(Blanket By-Laws Coverage (Building Only) - Form:)(.*)',1,1,'i',2)) columnname
FROM tablename [...]
我得到的是空值,我想这是因为字符串中有括号,但我不知道如何避免它。 在 99% 的情况下,描述没有括号,所以这个 REGEXP 可以工作,但事实并非如此,我找不到让它工作的方法
有人能帮忙吗?
谢谢, 迈克尔
将 REGEXP_SUBSTR
与仅围绕表单值的捕获组一起使用:
SELECT MAX(REGEXP_SUBSTR(pqb.description, 'Blanket By-Laws Coverage \(Building Only\) - Form:(\S*)', 1, 1, 'i', 1))
FROM tablename;
请注意,(Building Only)
周围的括号是 字面意思 ,因此,应使用反斜杠对它们进行转义。另请注意,在您当前的查询中,除了表单和值之外,您还有另一个捕获组。您也不需要那个捕获组,所以我已将其删除。
你需要对括号进行转义,还需要第一个子表达式。所以使用以下 regexp
SELECT MAX(REGEXP_SUBSTR(pqb.description,
'Blanket By-Laws Coverage \(Building Only\) - Form:(.*)',
1,1,'i',1) ) columnname
FROM tablename [...]
为什么要担心转义 parens?难道你不想要“Form:
”之后的内容吗?请注意,如果未找到匹配项,REGEXP_REPLACE 将 return 原始字符串,其中 REGEXP_SUBSTR 将 return NULL。
WITH pqb(description) AS (
SELECT 'Blanket By-Laws Coverage (Building Only) - Form:G00150' FROM dual
)
--SELECT REGEXP_SUBSTR(description, '.*Form:(.*)', 1, 1, NULL, 1) AS Form
SELECT REGEXP_REPLACE(description, '.*Form:(.*)', '') AS Form
from pqb;
FORM
------
G00150
1 row selected.