在内联数组上使用 postgresql 模糊运算符



我想利用postgresql模糊匹配来处理不是来自表格的数据,最终目标是尝试将国家名称与拼写错误进行匹配。我试过这个:

select foo from (select ARRAY['France', 'Thailand', 'Germany' ]) as foo where 'Thailande' % any(foo);

这会产生错误:

ERROR:  op ANY/ALL (array) requires array on right side

尝试类型转换foo似乎意味着我的子选择语句的结果不被视为类型数组,而是记录:

=> select foo from (select ARRAY['France', 'Thailand', 'Germany' ]) as foo where 'Thailande' % any(foo::varchar[]);
ERROR:  cannot cast type record to character varying[]
LINE 1: ...', 'Germany' ]) as foo where 'Thailande' % any(foo::varchar[...
                                                             ^

是否有任何方法可以强制数组类型或以其他方式实现所需的结果?

注意:我正在使用postgresql-9.3.5

我认为这里的重点是foo不指定字段而是指定行。

可能你想要这个:

select foo from (select ARRAY['France', 'Thailand', 'Germany' ]) as a(foo)
  where 'Thailande' % any(a.foo);

但请注意,这将选择整个数组作为结果,而不是与Thailande匹配的单个组件。

为了获得单个单词,我宁愿首先不使用数组,而是使用VALUES子句,如下所示:

select foo from (values ('France'), ('Thailand'), ('Germany')) 
 as a(foo)
where 'Thailande' % a.foo;

结果:

   foo    
----------
 Thailand

相关内容

  • 没有找到相关文章

最新更新