找關鍵字要排除一些情況
找關鍵字要排除以下情況:
1. 假設某欄位的內容為'我領了10001元'
若檢查內容是否提到100, 但我不想要因為句子內有一大串數字有包含100時也被撈出 ex.1234561001
where 條件可加上如下:
where ((NOT REGEXP_LIKE('100', '^\d+$')) or REGEXP_LIKE ('我領了10001元', '(^|\D)'||'100'||'(\D|$)'))
2. 假設檢查內容為'我的使用者帳號輸入錯誤'
若檢查內容是否提到 val 欄位值(ex. 使用者
或使用者帳號
),
但我不想要因為句子因為同時包含使用者
或使用者帳號
就列出所有對應的key欄位(關鍵字), 只要列出字長的使用者帳號
的pkey
所以撈取結果再過濾一次, 檢查目標及內容太多時, 對單筆的語法如下:
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
)
整批, 並且將pkey用逗號串起來語法如下: 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. 臺灣是我的國家