我有一列包含一串用逗号分隔的值。我使用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, ' ', ''));
是否有一种方法可以将其限制为仅修剪,
的枯萎侧
答案 0 :(得分:1)
您可以尝试用逗号替换,[ ]
或[ ],
:
SELECT
col1,
col2,
FIND_IN_SET('carpet', REPLACE(REPLACE(col1, ', ', ','), ' ,', ',')) AS output
FROM yourTable;
注意:此答案假定逗号前后最多有一个前导/后跟空格,并且 实际数据本身不包含逗号。如果可以有任意数量的空格,则此答案将失败。在这种情况下,您真正需要的是正则表达式替换。 MySQL 8+确实支持此功能,但是更好的选择是将数据标准化并停止存储CSV数据。