gpt4 book ai didi

mysql - 如何使用 SQL 使用当前值的子字符串更新值

转载 作者:行者123 更新时间:2023-11-29 01:33:02 25 4
gpt4 key购买 nike

在我的位置表中,一些城市名称包含邮政编码。我想删除邮政编码。邮政编码(如果有)位于城市名称的右侧。 (我正在使用 MySQL)

我可以用这个查询选择所有这样的城市:

SELECT name FROM location where name REGEXP '[0-9]$';

它显示:

Lahore-54000
Karachi-75000
Islamabad-87544

现在,我想更新删除邮政编码的名称列。
如何编写更新查询?

最佳答案

第一部分

试试这个 -

UPDATE location
SET
name = LEFT(name, LENGTH(SUBSTRING_INDEX(name, '-', -1)) + 1)
WHERE
name REGEXP '[0-9]$';

第二部分

附加功能:

DELIMITER $$

CREATE FUNCTION mytrim(input_string VARCHAR(255))
RETURNS VARCHAR(255) CHARSET utf8
BEGIN
SET @pos = NULL;
SET @len = length(input_string);
SET @i = @len;

WHILE @i > 0
DO
SET @c = substring(input_string, @i, 1);
IF (ascii(@c) > 47 AND ascii(@c) < 58) OR @c = '-' THEN
SET @pos = @i;
ELSE
SET @i = -1;
END IF;

SET @i = @i - 1;
END WHILE;

RETURN if(@pos IS NULL, input_string, substring(input_string, 1, @pos - 1));
END
$$

DELIMITER ;

例子:

SET @n1 = "564, garden-block, Karachi-75000";
SET @n2 = "55, abc-block, Karachi 75870";
SELECT mytrim(@n1), mytrim(@n2);
+----------------------------+-------------------------+
| mytrim(@n1) | mytrim(@n2) |
+----------------------------+-------------------------+
| 564, garden-block, Karachi | 55, abc-block, Karachi |
+----------------------------+-------------------------+

尝试用它来替换值:

UPDATE location
SET
name = mytrim(name)
WHERE
name REGEXP '[0-9]$';

关于mysql - 如何使用 SQL 使用当前值的子字符串更新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5648150/

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