2017-07-31 340 views
1

我一直在试图找出以下日子。Postgres正则表达式子字符串或正则表达式匹配

表1:同义词

Id   Synonym  code 

------------------------------ 
1   Car Tyre  001 

2   Bike Tyre  002 

3   Cycle Tyre 003 

4   Hammer Tube 001 

现在我输入=“与汽车轮胎从锤管AUDI 2000”

输出=列出代码“001”两次,因为输入的文本既包含“汽车轮胎“和‘锤管’

当我尝试这下面的查询,仅显示一个时间,但我需要两次

Select * from synonym where 'WITH CAR TYRE FROM Hammer Tube AUDI 2000' ~ Synonym; 
+0

汽车轮胎是大写。你确定它会给你两个结果。 –

+0

案件不是问题,如果它是小写也没有问题,但我需要两次结果。请帮帮我。 – Gobinath

+0

https://www.postgresql.org/docs/9.0/static/functions-matching.html,阅读9.7.3。那么你会在那里得到更多的信息。 –

回答

1

使用position()结合lower()

with synonym(id, synonym, code) as (
values 
    (1, 'Car Tyre', '001'), 
    (2, 'Bike Tyre', '002'), 
    (3, 'Cycle Tyre', '003'), 
    (4, 'Hammer Tube', '001') 
) 

select * 
from synonym 
where position(lower(synonym) in lower('WITH CAR TYRE FROM Hammer Tube AUDI 2000')) > 0 

id | synonym | code 
----+-------------+------ 
    1 | Car Tyre | 001 
    4 | Hammer Tube | 001 
(2 rows) 
+0

谢谢你的工作完美,在这种情况下,现在我需要计数独特的行.. – Gobinath