我想利用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