Eva*_*oll 5 postgresql array operator like string-searching
我们有一个简单的语法,允许我们查看单个标量的数组,
SELECT 'foo' = ANY(ARRAY['foo', 'bar', 'baz']);
Run Code Online (Sandbox Code Playgroud)
我们可以用同样的方法来匹配 LIKE
SELECT 'foobar' LIKE ANY(ARRAY['foo%', 'bar%', 'baz%'];
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果你想做另一个。
SELECT ANY(ARRAY['foobar', 'barbar', 'bazbar']) LIKE 'foo%'
ERROR: syntax error at or near "ANY"
LINE 1: SELECT ANY(ARRAY['foobar', 'barbar', 'bazbar']) LIKE 'foo%';
Run Code Online (Sandbox Code Playgroud)
我知道语法不起作用,但我希望它起作用。
# SELECT ARRAY['foobar', 'barbar', 'bazbar'] LIKE 'foo%';
ERROR: operator does not exist: text[] ~~ unknown
LINE 1: SELECT ARRAY['foobar', 'barbar', 'bazbar'] LIKE 'foo%';
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Run Code Online (Sandbox Code Playgroud)
我想过滤一个数组以查看元素是否存在。这可能不使用unnest
吗?
Postgres 手册表明您可能存在设计问题:
\n\n\n\n\n数组不是集合;搜索特定的数组元素可能是数据库设计错误的标志。考虑使用一个单独的表,其中每个项目都有一行,该项目将成为数组元素。这将更容易搜索,并且对于大量元素来说可能会更好地扩展。
\n
你可以让你的操作符更高效 \xe2\x80\x94 如果它在第一次匹配后停止检查会更好:
\n\n\n\n\n\n\nRun Code Online (Sandbox Code Playgroud)\nCREATE OR REPLACE FUNCTION like_in_array( arr text[], pattern text )\nRETURNS bool AS $$\n SELECT coalesce(( SELECT true\n FROM unnest(arr) AS u(n)\n WHERE n LIKE pattern \n LIMIT 1),false);\n$$ LANGUAGE sql\nIMMUTABLE;\n
dbfiddle在这里
\n 归档时间: |
|
查看次数: |
11714 次 |
最近记录: |