字符串的 FIND_IN_SET 示例
Posted
技术标签:
【中文标题】字符串的 FIND_IN_SET 示例【英文标题】:FIND_IN_SET example for string 【发布时间】: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
【问题讨论】:
country_codes
变量在哪里定义?
你在哪里找到in the Postgres manual find_in_set()
?
【参考方案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 的建议也可能是这种情况。 我不明白你的评论。以上是关于字符串的 FIND_IN_SET 示例的主要内容,如果未能解决你的问题,请参考以下文章