【问题标题】:FIND_IN_SET example for string字符串的 FIND_IN_SET 示例
【发布时间】:2019-04-30 05:28:38
【问题描述】:

我正在使用 FIND_IN_SET 并出现以下错误

SQL 错误 [42883]:错误:函数 find_in_set(unknown, character varying[]) 不存在
提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。

我使用了下面的例子

where FIND_IN_SET ('US', country_codes) and  
where FIND_IN_SET ('"US"', country_codes)

表格如下

COUNTRY_CODES
{US, CA}
{US, CA, UT}
{FR, BG, ET}

    and want to use for group by country_codes where as it should consider     COUNTRY_CODES
        {US, CA}
        {US, CA, UT} as same country as it is coming in the query
where as group by consider it as different country

【问题讨论】:

标签: sql postgresql


【解决方案1】:

这个错误输出看起来你正在运行 Postgres,不是 MySQL。

如果country_codes 列实际上是一个 Postgres 数组,那么就使用这个:

WHERE country_codes @> ARRAY['US']::varchar[]

如果您确实将 CSV 数据存储在字符串列中,那么我建议改用以下逻辑:

WHERE ',' || country_codes || ',' LIKE '%,US,%'

要查看上述逻辑在做什么,请考虑您正在尝试匹配以下国家/地区代码的 CSV 列表:

US,CA,UT

变成了

,US,CA,UT,

然后,很明显,US, 存在于该 CSV 字符串中。请注意,您应该避免将 CSV 数据直接存储在 SQL 表中。

【讨论】:

  • 由于这是_varchar:字符串数组类型的内容,所以like 不可用。像普通字符串一样工作
  • 我在回答的最后给了你一个处理数组的选项。在您的上述评论之前,您对内容是 CSV 的建议也可能是这种情况。
  • 我不明白你的评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-28
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-27
相关资源
最近更新 更多