REGEXP_LIKE 在 PostgreSQL 中
REGEXP_LIKE in Postgresql
我有一个table来存储替换,它包括两个字段,第一个是存储单词,第二个是存储替换。我知道 table 的创建不是 suitable 方法,但它已经存在并被其他系统使用。
table 如下所示:
WORD SUBS_LIST
------------------------------------
MOUNTAIN MOUNTAIN, MOUNT, MT, MTN
VIEW VIEW, VU
FIFTH V, 5TH
YOU EWE, U , YEW
ROW ROW , ROE
ONE UN , ONE
然后,当一个名字进来时,它是根据table替换的。我能够使用 regexp_like 在 Oracle 上进行先前的操作。但是,我想在 Postgresql 中应用相同的方法。我曾尝试使用 ~ 替换 regexp_like 和 regexp_matches 但没有成功。
请找到here我目前试过的数据库<>Fiddle。
感谢您的帮助:)
你不需要正则表达式。如果我对您的理解正确,您想要输入一个词,请在 sub_list
和 return 的 word
列中搜索元素。最好将(丑陋的)逗号分隔列表转换为数组,然后使用 ANY 运算符:
select word
from the_table
where 'mount' = any(string_to_array(subs_list, ','));
上面的内容可以正确处理 ,
周围的空格 - 不确定这是格式设置的结果还是您确实以这种方式存储列表。如果确实需要处理空格,可以使用以下方法:
select word
from the_table
where exists (select *
from unnest(string_to_array(subs_list, ',')) as x(subs)
where trim(x.subs) = 'mount');
如果您输入的是单词列表,您可以使用 regexp_split_to_table()
将输入的单词转换为行并加入替换。
SELECT w.input, coalesce(x.word, w.input) as word
FROM regexp_split_to_table('MOUNT VU FOOD CAFE', '\s') as w(input)
LEFT JOIN (
select s.word, trim(s1.token) as token
from subs s
cross join unnest(string_to_array(s.subs_list, ',')) s1(token)
) as x on lower(trim(w.input)) = lower(x.token)
;
我有一个table来存储替换,它包括两个字段,第一个是存储单词,第二个是存储替换。我知道 table 的创建不是 suitable 方法,但它已经存在并被其他系统使用。
table 如下所示:
WORD SUBS_LIST
------------------------------------
MOUNTAIN MOUNTAIN, MOUNT, MT, MTN
VIEW VIEW, VU
FIFTH V, 5TH
YOU EWE, U , YEW
ROW ROW , ROE
ONE UN , ONE
然后,当一个名字进来时,它是根据table替换的。我能够使用 regexp_like 在 Oracle 上进行先前的操作。但是,我想在 Postgresql 中应用相同的方法。我曾尝试使用 ~ 替换 regexp_like 和 regexp_matches 但没有成功。
请找到here我目前试过的数据库<>Fiddle。
感谢您的帮助:)
你不需要正则表达式。如果我对您的理解正确,您想要输入一个词,请在 sub_list
和 return 的 word
列中搜索元素。最好将(丑陋的)逗号分隔列表转换为数组,然后使用 ANY 运算符:
select word
from the_table
where 'mount' = any(string_to_array(subs_list, ','));
上面的内容可以正确处理 ,
周围的空格 - 不确定这是格式设置的结果还是您确实以这种方式存储列表。如果确实需要处理空格,可以使用以下方法:
select word
from the_table
where exists (select *
from unnest(string_to_array(subs_list, ',')) as x(subs)
where trim(x.subs) = 'mount');
如果您输入的是单词列表,您可以使用 regexp_split_to_table()
将输入的单词转换为行并加入替换。
SELECT w.input, coalesce(x.word, w.input) as word
FROM regexp_split_to_table('MOUNT VU FOOD CAFE', '\s') as w(input)
LEFT JOIN (
select s.word, trim(s1.token) as token
from subs s
cross join unnest(string_to_array(s.subs_list, ',')) s1(token)
) as x on lower(trim(w.input)) = lower(x.token)
;