gpt4 book ai didi

MySQL 仅替换文本字段/列中的第一个匹配项

转载 作者:行者123 更新时间:2023-11-29 08:36:21 24 4
gpt4 key购买 nike

我编写了一个函数来替换 MySQL Text 列中的第一次出现,但它有点复杂......

UPDATE
table_name
SET
column=CONCAT(
LEFT(column,LOCATE('some string', column)-1),
CONCAT(substring(column, LOCATE('some string', column) + $length),
'new string'))

其中$length是我们要替换的字符串的长度。如果我们使用 php,它是 strlen() 函数,但在 MySQL 中它将是 CHAR_LENGTH() 函数。

您知道仅替换文本列中的第一个匹配项的更好方法吗?

最佳答案

您可以使用TRIM :

UPDATE table_name SET column = TRIM(LEADING 'some string' FROM column);

假设“某个字符串”在“列”内容的开头连续出现的次数不超过 1 次。

因此,如果列包含:

"some string foo some string"

但不适用于:

"some string some string foo some string"

编辑 - 添加 MySQL 函数以简化流程

我看不到您正在使用的机制的替代方案,但可以通过在 MySQL 中创建一个函数来简化执行它(如果您有权限):

delimiter $$

create function replace_first(
p_text_to_search varchar(255),
p_text_to_replace varchar(255)
)
returns varchar(255)
begin
declare v_found_pos int(11);
declare v_found_len int(11);
declare v_text_with_replacement varchar(255);

select locate(p_text_to_replace, p_text_to_search)
into v_found_pos;

select char_length(p_text_to_replace)
into v_found_len;

select concat(
left(p_text_to_search, v_found_pos-1),
mid(p_text_to_search, (v_found_pos + v_found_len))
)
into v_text_with_replacement;

return v_text_with_replacement;
end$$

delimiter ;

然后你可以使用以下方式调用它:

select replace_first('bar foo foo baz foo', 'foo');

结果:

'bar  foo baz'

关于MySQL 仅替换文本字段/列中的第一个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15109987/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com