在Ecto查询中Regex的正确语法是什么?

时间:2016-08-12 03:19:06

标签: elixir phoenix-framework ecto

这些都不起作用:

from m in Model, where: m.name == ^~r(/.*#{query}.*/i)

from m in Model, where: m.name =~ ^~r(/.*#{query}.*/i)

正确的语法是什么?我在文档中找不到任何内容。

1 个答案:

答案 0 :(得分:10)

由于您尝试匹配不区分大小写的短语,因此应使用ilike/2使用SQL LIKE operator

from m in Model, where: ilike(m.name, "%#{query}%")

like/2将用于区分大小写的搜索。

Ecto不支持开箱即用的正则表达式,因为数据库之间的实现差别很大。您需要做的是查看您要定位的数据库的正则表达式语法,并使用Ecto fragment/1自行构建该部分查询。以下示例搜索与/^Peter [A-Z]$/匹配的所有模型,使用PostgreSQL's POSIX regex feature

from m in Model, where: fragment('? ~ ?', m.name, '^Peter [A-Z]$')