fnd YGY LOOKUP_TYPE = 'welcome' HELO HIASDH LOOKUP_TYPE = 'home' hello how are you?
以上是字符串,我想输出如何从字符串中提取子字符串?
welcome
home
fnd YGY LOOKUP_TYPE = 'welcome' HELO HIASDH LOOKUP_TYPE = 'home' hello how are you?
以上是字符串,我想输出如何从字符串中提取子字符串?
welcome
home
查询1:
注:单引号需要在文字文本进行转义:
WITH test_data (string) AS (
SELECT 'LOOKUP_TYPE = ''welcome'' LOOKUP_TYPE = ''home'''
FROM DUAL
)
SELECT SUBSTR(string, quote1 + 1, quote2 - quote1 - 1) AS first_quoted_string,
SUBSTR(string, quote3 + 1, quote4 - quote3 - 1) AS second_quoted_string,
FROM (
SELECT string,
INSTR(string, '''', 1, 1) AS quote1,
INSTR(string, '''', 1, 2) AS quote2,
INSTR(string, '''', 1, 3) AS quote3,
INSTR(string, '''', 1, 4) AS quote4
FROM test_data
)
输出:
FIRST_QUOTED_STRING SECOND_QUOTED_STRING
------------------- --------------------
welcome home
查询2:
注:另类text literal报价demiliters q'[your string]'
使用,使得单引号不需要进行转义:
WITH test_data (string) AS (
SELECT q'[LOOKUP_TYPE = 'welcome' LOOKUP_TYPE = 'home']'
FROM DUAL
),
quotes (string, quote_start, quote_end, lvl) AS (
SELECT string,
INSTR(string, '''', 1, 1),
INSTR(string, '''', 1, 2),
1
FROM test_data
WHERE INSTR(string, '''', 1, 2) > 0
UNION ALL
SELECT string,
INSTR(string, '''', 1, 2 * lvl + 1),
INSTR(string, '''', 1, 2 * lvl + 2),
lvl + 1
FROM quotes
WHERE INSTR(string, '''', 1, 2 * lvl + 2) > 0
)
SELECT SUBSTR(string, quote_start + 1, quote_end - quote_start - 1) AS quoted_string
FROM quotes
输出:
QUOTED_STRING
-------------
welcome
home
查询3 - 正则表达式:
注:用于获取输入:your_string
绑定变量(你也可以使用文本文字代替):
WITH test_data (string) AS (
SELECT :your_string FROM DUAL
),
quotes (string, quoted_string, lvl, max_lvl) AS (
SELECT string,
REGEXP_SUBSTR(string, q'[LOOKUP_TYPE\s*=\s*("|''?)(.*?)\1]', 1, 1, NULL, 2),
1,
REGEXP_COUNT(string, q'[LOOKUP_TYPE\s*=\s*("|''?)(.*?)\1]')
FROM test_data
WHERE REGEXP_COUNT(string, q'[LOOKUP_TYPE\s*=\s*("|''?)(.*?)\1]') > 0
UNION ALL
SELECT string,
REGEXP_SUBSTR(string, q'[LOOKUP_TYPE\s*=\s*("|''?)(.*?)\1]', 1, lvl + 1, NULL, 2),
lvl + 1,
max_lvl
FROM quotes
WHERE lvl < max_lvl
)
SELECT quoted_string
FROM quotes
输出:
QUOTED_STRING
-------------
welcome
home
你为什么改变字符串? 请保持字符串与我张贴的相同,并在我的字符串中没有双引号只有单引号有 –
@HimanshAgarwal如果你想[字符串中的单引号''(http://stackoverflow.com/q/2875257/1509264),它需要使用第二个单引号''''转义 - 字符串在输出中每个位置只有一个单引号。字符串的文本与答案的有效性无关 - 如果您希望将其与您的文本一起使用,则只需将其替换(转义单引号)即可。 – MT0
老兄,这是我的字符串 FDGF YGY LOOKUP_TYPE ='welcome'HELO HIASDH LOOKUP_TYPE ='主页'你好吗? 我不能改变我的字符串中的任何东西。 –
with t (col) as (select q'[fnd YGY LOOKUP_TYPE = 'welcome' HELO HIASDH LOOKUP_TYPE = "home" hello LOOKUP_TYPE = ''man'' how are you?]' from dual)
select rtrim(regexp_replace(col,q'[(.*?LOOKUP_TYPE\s*=\s*(''|'|")(.*?)\2|.+)]','\3,'),',') as lookup_types
from t
+------------------+
| LOOKUP_TYPES |
+------------------+
| welcome,home,man |
+------------------+
查询3 - 正则表达式:正在工作,我想这个解决方案应该也适用于这个DSFSFSDFSDFSD LOOKUP_TYPE =“XXX_ASD”ASAD HELO HIASDH LOOKUP_TYPE =''XX_DSAS'' –
我想你想评论另一个答案 –
你能做吗我想要的是? –
想要得到用单引号括起来的文字吗?或者文本和字符串正是您需要搜索的内容? – BriteSponge
请张贴更多的样本数据和期望的结果来阐明您的需求。另外,你到目前为止尝试过什么? – Aleksej
基本上我想查找lookup_type的值。 –