在MySQL中更新分隔字符串值
假设我有一个列值在MySQL中更新分隔字符串值,mysql,Mysql,假设我有一个列值'1 | 2 | 3 | 4 | 5'。这些值是数组的字符串表示形式,我想删除字符串中的单个值(按整数),从而得到'1 | 2 | 4 | 5'。考虑到要删除的整数可能位于字符串中的任何位置,MySQL中最有效的方法是什么 update table set col=replace ( col, '3','') 这将在列上执行区分大小写的搜索。如果它是一个巨大的表,那么在此列上有一个索引。结果将相当快 这将在列上执行区分大小写的搜索。如果它是一个巨大的表,那么在此列上有一个索引。
'1 | 2 | 3 | 4 | 5'
。这些值是数组的字符串表示形式,我想删除字符串中的单个值(按整数),从而得到'1 | 2 | 4 | 5'
。考虑到要删除的整数可能位于字符串中的任何位置,MySQL中最有效的方法是什么
update table set col=replace ( col, '3','')
这将在列上执行区分大小写的搜索。如果它是一个巨大的表,那么在此列上有一个索引。结果将相当快
这将在列上执行区分大小写的搜索。如果它是一个巨大的表,那么在此列上有一个索引。结果将相当快。您可以使用以下内容:
UPDATE yourtable
SET col = TRIM(BOTH '|' FROM REPLACE(
REPLACE(
CONCAT('|',REPLACE(col, '|', '||'), '|'),
'|3|', '')
, '||', '|')
)
在这里,我将每个|
加倍到|
,然后在开头添加一个|
,在结尾添加一个。这样,每个元素的开头都有自己的
,结尾都有自己的
现在我们可以安全地用空字符串替换|3 |
我们现在需要将double|
转换回|
,并修剪字符串以最终删除开头的|
,以及结尾的一个
看到它工作
如果您确定元素3不能出现多次,则可以跳过将
|
加倍到|
,并且必须将|3
替换为
。其余的都一样。您可以使用如下内容:
UPDATE yourtable
SET col = TRIM(BOTH '|' FROM REPLACE(
REPLACE(
CONCAT('|',REPLACE(col, '|', '||'), '|'),
'|3|', '')
, '||', '|')
)
在这里,我将每个|
加倍到|
,然后在开头添加一个|
,在结尾添加一个。这样,每个元素的开头都有自己的
,结尾都有自己的
现在我们可以安全地用空字符串替换|3 |
我们现在需要将double|
转换回|
,并修剪字符串以最终删除开头的|
,以及结尾的一个
看到它工作
如果您确定元素3不能出现多次,则可以跳过将
|
加倍到|
,并且必须将|3
替换为
。其余的都是一样的。最有效的方法是规范化数据库。最有效的方法是规范化数据库。如果其中有33
的值怎么办?这将导致一个双分隔符--“1 | 2 | 4 | 5”。我正在寻找一种方法来“拆分”该值,从结果“数组”中删除一个,然后将结果与分隔符“连接”起来。如果其中有一个值33
,会怎么样?这将导致一个双分隔符-“1 | 2 | 4 | 5”。我正在寻找一种方法来“拆分”值,从结果“数组”中删除一个值,并使用分隔符将结果“连接”回来。对于创造性,使用+1。然而,我怀疑一定有一种更干净的方法来处理REGEX?????。@DeweyOx谢谢:)REGEX替换会更干净,但是mysql本机只支持regexp函数的一个子集,您必须安装此udf才能获得完整的REGEX支持:谢谢@fthiella。我会一直使用它,直到我奇迹般地找到一个更干净的替代品。创造力+1。然而,我怀疑一定有一种更干净的方法来处理REGEX?????。@DeweyOx谢谢:)REGEX替换会更干净,但是mysql本机只支持regexp函数的一个子集,您必须安装此udf才能获得完整的REGEX支持:谢谢@fthiella。我会一直用这个直到我奇迹般地找到一个更干净的替代品。