FIND_IN_SET值的修整功能

时间:2018-10-29 10:47:32

标签: mysql

我有一列包含一串用逗号分隔的值。我使用FIND_IN_SET来查询此列,并且在值和,之间没有空格之前,它可以正常工作。我无法控制输入。我发现唯一可行的解​​决方案是在REPLACE函数内的列上运行FIND_IN_SET。不幸的是,这将删除所有空格并可能返回不希望的结果。

打击示例将返回表中的两行,而不是仅返回第一行。

col1                  | col2      
carpet , foo, bar     | myVal1
abc, 123 , car pet    | myVal2

查询

SELECT FIND_IN_SET('carpet', REPLACE(col1, ' ', ''));

是否有一种方法可以将其限制为仅修剪,的枯萎侧

1 个答案:

答案 0 :(得分:1)

您可以尝试用逗号替换,[ ][ ],

SELECT
    col1,
    col2,
    FIND_IN_SET('carpet', REPLACE(REPLACE(col1, ', ', ','), ' ,', ',')) AS output
FROM yourTable;

enter image description here

Demo

注意:此答案假定逗号前后最多有一个前导/后跟空格,并且 实际数据本身不包含逗号。如果可以有任意数量的空格,则此答案将失败。在这种情况下,您真正​​需要的是正则表达式替换。 MySQL 8+确实支持此功能,但是更好的选择是将数据标准化并停止存储CSV数据。