找关键字要排除一些情况
找关键字要排除以下情况:
1. 假设某栏位的内容为'我领了10001元'
若检查内容是否提到100, 但我不想要因为句子内有一大串数字有包含100时也被捞出 ex.1234561001
where 条件可加上如下:
where ((NOT REGEXP_LIKE('100', '^\d+$')) or REGEXP_LIKE ('我领了10001元', '(^|\D)'||'100'||'(\D|$)'))
2. 假设检查内容为'我的使用者帐号输入错误'
若检查内容是否提到 val 栏位值(ex. 使用者
或使用者帐号
),
但我不想要因为句子因为同时包含使用者
或使用者帐号
就列出所有对应的key栏位(关键字), 只要列出字长的使用者帐号
key
所以捞取结果再过滤一次, 检查目标及内容太多时, 对单笔的语法如下:
with a as (select m.key,m.val
from smapping m
WHERE '我的使用者帐号输入错误' like '%'||m.val||'%' ESCAPE '\'
and ((NOT REGEXP_LIKE(val, '^\d+$')) or REGEXP_LIKE ('我的使用者帐号输入错误', '(^|\D)'||m.val||'(\D|$)'))
)
select distinct a.key
from a
where not exists(select 1 from a b
where b.val like '%'||a.val||'%' ESCAPE '\'
and a.val <> b.val
)
整批, 并且将key用逗号串起来语法如下: QUS.qus栏位即检查对象( ex.'我的使用者帐号输入错误'
)
with a as (select t.qusid, m.key,m.val
from QUS t
join smapping m
on t.qus like '%'||m.val||'%' ESCAPE '\'
and ((NOT REGEXP_LIKE(val, '^\d+$')) or REGEXP_LIKE (t.qus, '(^|\D)'||m.val||'(\D|$)'))
),
b as (select distinct a.qusid, a.key
from a
where not exists(select 1 from a b
where a.qusid = b.qusid
and b.val like '%'||a.val||'%' ESCAPE '\'
and a.val <> b.val)
)
SELECT qusid, (LISTAGG(key, ',') WITHIN GROUP (ORDER BY key)) AS col
FROM b
GROUP BY qusid
Taiwan is a country. 台湾是我的国家