MySQL通过仅知道其中的一部分来查找更大的字符串

时间:2014-07-16 01:26:49

标签: php mysql

我有一个这样的字符串:

  

x26y6z8 / 0 | x999y0z1 / 1 | x1y5z40 / 9999 |等...

让我说我知道这个:

  

x1y5z40

我怎样才能找到我正在寻找的字符串的整个部分?是的

  

x1y5z40 / 9999

它实际上很简单,但我这样做的方式绝对不是正确的,因为我用查询向数据库发送垃圾邮件并用php完成所有操作,这显然会导致它变慢。

为了让事情变得更加困难,一旦我找到了

  

x1y5z40 / 9999

我需要替换它,例如:

  

x1y5z40 / 0

如果可能的话,我很想完全使用MySQL,也许有1个查询,有人知道我该怎么办?

2 个答案:

答案 0 :(得分:1)

使用REPLACE()

update TBL 
   set content = REPLACE(content , 'x1y5z40/9999', 'x1y5z40/0') 

来源:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_replace

答案 1 :(得分:0)

我认为你遗漏了字符串的组成部分由|分隔。我认为你可以使用MySQL字符串函数来做到这一点。以下内容应该返回第二部分:

select substring_index(substring_index(col, '|x1y5z40/', 2), '|', 1)

啊,现在用0替换第二部分。那会有点丑陋:

select replace(col,
               concat('|x1y5z40/',
                      substring_index(substring_index(col, '|x1y5z40/', 2), '|', 1),
                      '|'
                     ),
               '|x1y5z40/0'
               )

如果您尝试更改数据库中的数据,也可以将其表示为更新。

顺便说一下,在字符串中存储事物列表在SQL中是一个非常糟糕的主意。也许你没有选择。但SQL具有出色的数据结构,可用于存储列表,具有各种内置功能。它被称为表。你应该有一个联结表,每个实体有一行,字符串中有值。