Elixir:如何使用双空格搜索数据库数据

时间:2018-10-12 00:09:58

标签: postgresql elixir ecto

在我的前端,数据显示只有一个空格。但是,当我在搜索栏中过滤数据时,不会产生任何结果。事实证明,数据实际上具有双倍空格。但是当它被repo.all时,双空格变成单个空格。我需要搜索这些数据。

我有一个正则表达式,我发现我在pgadmin中尝试了它。我需要将其复制到我的Elixir数据表中,特别是将其集成到ilike函数中。

正则表达式为

SELECT trim(regexp_replace(name, '\s+', ' ', 'g')) as col_name
FROM table where col_name = 'TEST  DATA'

1 个答案:

答案 0 :(得分:0)

我认为一种更好的方法可能是在搜索时使用%代替空格,我发现这通常会给我带来更好的结果。这里是the docs for ILIKE in Postgres,但我将举例说明。 %中使用的ILIKE字符匹配任何字符串(包括空字符串)。

SELECT * FROM t1 WHERE col_name ILIKE '%test%data%';

上面的查询将与您给出的示例匹配。当然,它也将匹配诸如"testdata""test data""something test something data"之类的字符串,但是我认为通常这种方法将返回用户在输入诸如{{1 }}。

从用户输入到适合Ecto "test data"的字符串进行转换的帮助函数如下所示:

ilike

您可以在这样的查询中使用它:

defmodule SearchHelpers do
  def to_ilike_search_string(search_string) do
    joined_string =
      search_string
      |> String.split()
      |> Enum.join("%")

    "%#{joined_string}%"
  end
end

# SearchHelpers.to_ilike_search_string("test data")
# => "%test%data%"

祝你好运,希望对你有帮助。