在我的前端,数据显示只有一个空格。但是,当我在搜索栏中过滤数据时,不会产生任何结果。事实证明,数据实际上具有双倍空格。但是当它被repo.all时,双空格变成单个空格。我需要搜索这些数据。
我有一个正则表达式,我发现我在pgadmin中尝试了它。我需要将其复制到我的Elixir数据表中,特别是将其集成到ilike函数中。
正则表达式为
SELECT trim(regexp_replace(name, '\s+', ' ', 'g')) as col_name
FROM table where col_name = 'TEST DATA'
答案 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%"
祝你好运,希望对你有帮助。