Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 通过微调函数在值的\u集合中查找\u_Mysql - Fatal编程技术网

Mysql 通过微调函数在值的\u集合中查找\u

Mysql 通过微调函数在值的\u集合中查找\u,mysql,Mysql,我有一个包含逗号分隔值字符串的列。我使用FIND_IN_SET来查询此列,它工作正常,直到值和之间有一个空格,。我无法控制输入。我发现唯一有效的解决方案是在FIND_IN_SET函数中的列上运行REPLACE。不幸的是,这将删除所有空格,并可能返回不需要的结果 blow示例将返回表中的两行,而不是仅返回第一行 col1 | col2 carpet , foo, bar | myVal1 abc, 123 , car pet | myVa

我有一个包含逗号分隔值字符串的列。我使用FIND_IN_SET来查询此列,它工作正常,直到值和之间有一个空格,。我无法控制输入。我发现唯一有效的解决方案是在FIND_IN_SET函数中的列上运行REPLACE。不幸的是,这将删除所有空格,并可能返回不需要的结果

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

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

是否有一种方法可以将此限制为只修剪空间的萎缩面,

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

SELECT
    col1,
    col2,
    FIND_IN_SET('carpet', REPLACE(REPLACE(col1, ', ', ','), ' ,', ',')) AS output
FROM yourTable;
注意:此答案假设逗号周围最多有一个前导/尾随空格,并且实际数据本身不包含逗号。如果有任意数量的空格,这个答案就会失败。在这种情况下,您真正需要的是正则表达式的替换。MySQL 8+确实支持这一点,但更好的办法是规范化您的数据并停止像这样存储CSV数据。

您可以尝试用逗号替换、[]或[]:

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

注意:此答案假设逗号周围最多有一个前导/尾随空格,并且实际数据本身不包含逗号。如果有任意数量的空格,这个答案就会失败。在这种情况下,您真正需要的是正则表达式的替换。MySQL 8+确实支持这一点,但更好的办法是规范化您的数据,并停止像这样存储CSV数据。

您描述的问题与了解规范化的坏表设计时间相匹配。如果您可以访问MySQL server 8.0版,您可以使用REGEXP@RaymondNijland我完全知道有缺陷的设计。我的任务是在解决数据问题时提供临时解决方案addressed@MadhurBhaiya我过去在MySQL中使用过REGEX,发现它非常慢。我过去在MySQL中使用过REGEX,发现它非常慢。没有解决方案可以让它快速。。。FIND_IN_SET与regexp一样糟糕您描述的问题与坏表设计时间相匹配,以了解规范化。如果您可以访问MySQL server 8.0版,您可以使用REGEXP@RaymondNijland我完全知道有缺陷的设计。我的任务是在解决数据问题时提供临时解决方案addressed@MadhurBhaiya我过去在MySQL中使用过REGEX,发现它非常慢。我过去在MySQL中使用过REGEX,发现它非常慢。没有解决方案可以让它快速。。。在_集合中查找_和regexp一样糟糕。我认为,如果其中一个集合上有多个空格字符,则此操作将不起作用side@MadhurBhaiya是的,当我回答的时候我知道这一点,但我试图给出一个解决方案,解决我所认为的确切问题,而事实似乎并非如此。呃,我感觉不舒服。谢谢-这很难看,但数据也很难看:/I我认为如果其中一个上有多个空格字符,这将不起作用side@MadhurBhaiya是的,当我回答的时候我知道这一点,但我试图给出一个解决方案,解决我所认为的确切问题,而事实似乎并非如此。呃,我感觉不舒服。谢谢-这很难看,但数据也是如此:/