WITH -- S a m p l e D a t a :
tbl (ID, TXT) AS
(
Select 1, 'MENACE DE MORT REITEREE EN RECIDIVE' From Dual Union All
Select 2, 'VIOLENCES SUR CONJOINT' From Dual Union All
Select 3, 'MALTRAITANCE PSYCHOLOGIQUE SUR CONJOINT' From Dual
),
。和单词列表。。
words_str AS
(
Select '\MENACE\VIOLENCES\MALTRAITANCE\PSYCHOLOGIQUE\MORT\CONJOINT\' "WORDS_TO_RETURN" From Dual
),
words AS
(
Select LEVEL "WORD_ID", SubStr(WORDS_TO_RETURN, InStr(WORDS_TO_RETURN, '\', 1, LEVEL) + 1, InStr(WORDS_TO_RETURN, '\', 1, LEVEL + 1) - InStr(WORDS_TO_RETURN, '\', 1, LEVEL) -1) "WORDS"
From words_str
Connect By LEVEL <= Length(WORDS_TO_RETURN) - Length(Replace(WORDS_TO_RETURN, '\', '')) - 1
)
-- M a i n S Q L :
SELECT DISTINCT ID, TXT,
LISTAGG(WORDS, ' ') OVER(Partition By ID, TXT) "SHORT_TXT"
FROM ( Select t.ID, t.TXT, w.WORD_ID, w.WORDS
From tbl t
Inner Join words w ON( InStr('\' || Replace(t.TXT, ' ', '\') || '\' , '\' || w.WORDS || '\') > 0 )
Order By t.ID, w.WORD_ID
)
ORDER BY ID
结果应该是。。 | ID| TXT|简体中文| | - -----|- -----|- -----| | 1| MENACE DE MORT REITERIE EN RECIDIVE|死亡威胁| | 2|联合暴力|联合暴力| | 3|共同出轨心理学|出轨心理学联合体|
with temp as (
select 1 as someID, 'MENACE DE MORT REITEREE EN RECIDIVE' as someStr from dual
)
select
someid,
listagg(str, ' ') within group ( order by str)
from (
SELECT distinct someID ,trim(regexp_substr(someStr, '[^ ]+', 1, level)) str
FROM (SELECT someID, someStr FROM temp) t
CONNECT BY instr(someStr, ' ', 1, level - 1) > 0
) t
where
str in (
'MENACE' , 'MORT'
)
group by
someid
3条答案
按热度按时间pvcm50d11#
在任何情况下,你都需要一个单词列表(可能还有一些单词的顺序)来完成这项工作。其中一个选项是创建单词列表并将其存储在表中。在这个答案中,我将创建CTE(单词)作为示例。但首先要使用一些示例数据:
。和单词列表。。
| WORD_ID|文字|
| - -----|- -----|
| 1|威胁|
| 2|暴力|
| 3|通奸|
| 4|心理学|
| 5个|MORT|
| 六|联合|
现在,您可以将表格与单词连接起来,并将文本截断到上面的单词列表中...
结果应该是。。
| ID| TXT|简体中文|
| - -----|- -----|- -----|
| 1| MENACE DE MORT REITERIE EN RECIDIVE|死亡威胁|
| 2|联合暴力|联合暴力|
| 3|共同出轨心理学|出轨心理学联合体|
3b6akqbq2#
你也可以
然后,而不是玩CTE,递归查询,和其他好东西…只需将搜索表达式(使用布尔运算符)存储在“查询”表中:例如“威胁与死亡”,...(见这里的doc:https://docs.oracle.com/en/database/oracle/oracle-database/21/ccref/oracle-text-CONTAINS-query-operators.html#GUID-6410B783-FC9A-4C99-B3AF-9E0349AA43D1)然后
drkbr07n3#
您可以使用简单的正则表达式和connectby将字符串拆分为行,并从中选择所需的行。也许将你想要的值存储在一个表中,然后连接到它。
Fiddle