在PostgreSQL中使用小写+ unaccent +多列进行SELECT

时间:2018-01-10 15:26:40

标签: sql postgresql

学校

id | address                 | name
1  | Rybničná 59, Bratislava | Stredná odborná škola elektrotechnická
2  | Ul. Sibírska 1, Trnava  | Stredná odborná škola elektrotechnická

我想要什么

来自客户端如果我想输入:

  1. Strednáodborná
  2. strednáodborná
  3. stredna odborna
  4. 必须找到id为1和2的行

    如果我想输入Bratislava或bratis它必须找到id为1的行

    我拥有什么

    SELECT * FROM schools WHERE unaccent(address) LIKE ('%' || 'bratis' || '%');
    

    我需要从2列(地址和名称)中选择

2 个答案:

答案 0 :(得分:0)

我希望这有效

  SELECT * FROM schools 
  WHERE unaccent(address|| ' ' ||name) ILIKE ('%' || 'bratis' || '%');

答案 1 :(得分:0)

要进行搜索case insentive,请使用ILIKE代替LIKE。然后,您还希望从输入字符串中删除重音。最后,只需使用ANDOR来合并这两个条件(请注意,您可以对两列使用相同的搜索字词 - 在这种情况下使用OR

SELECT * FROM schools 
WHERE unaccent(address) ILIKE ('%' || unaccent('bratis') || '%')
  AND unaccent(name) ILIKE ('%' || unaccent('Stredná odborná') || '%')