【问题标题】:mysql replace string count limitmysql替换字符串计数限制
【发布时间】:2012-10-15 11:09:00
【问题描述】:

Mysql Replace 函数替换它在指定列或字符串中找到的字符串,是否有任何其他方法可以限制列/字符串的替换计数?

# replace 32 from the string, there are 3 occurance
SELECT REPLACE('32,138,149,145,146,121,134,127,129,120,132,232','32','');

# note: 132,232 converted to 1 and 2
print>>> ,138,149,145,146,121,134,127,129,120,1,2

如何克服这个问题?

【问题讨论】:

  • 你想只用空字符串替换精确的 32 而不是替换像 132 和 232 这样的字符串吗?
  • 如果您想替换精确的 '32' 而没有其他组合,如 132 和 232 等,这可能很有用:stackoverflow.com/questions/6093813/…
  • 谢谢,但我看到那个帖子不是我要找的。我只想在字符串中限制 1 次替换。感谢@Nedret Recep 解决方案

标签: mysql string csv replace


【解决方案1】:

用','虚构连接干草堆,然后寻找针',32'并用','替换它

SELECT REPLACE(CONCAT(',','32,138,149,145,146,121,134,127,129,120,132,232',','), ',32,', ',');

此外,如果您愿意,还可以修剪两端的逗号。

SELECT TRIM(BOTH ',' FROM REPLACE(CONCAT(',','32,138,149,145,146,121,134,127,129,120,132,232',','), ',32,', ','));

【讨论】:

  • 请注意,srting 操作通常很慢。我想这些是 ID 列表,如果您需要使用 ID 列表和字符串,那么您有一些非正常的数据库结构。我建议您规范化数据库结构并使用连接。
  • 当每 250 个分支有 5000+ 条记录时,行将移动到 5000x250 行,可能超过 1250000+,InnoDB 在更新时提供行锁定优势,因此考虑到最好只在 5000 行上运行与 1250000+ 行相比。感谢您提供我可以拥有的最佳解决方案:)
猜你喜欢
  • 1970-01-01
  • 2011-08-22
  • 2016-07-12
  • 2017-03-30
相关资源
最近更新 更多