字符串的 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 示例的主要内容,如果未能解决你的问题,请参考以下文章

MySQL find_in_set 与多个搜索字符串

FIND_IN_SET

mysql中的find_in_set()函数

mysql中的find_in_set()函数

coding++ :MySQL函数——FIND_IN_SET()

coding++ :MySQL函数——FIND_IN_SET()