gpt4 book ai didi

mysql - 我需要删除最后一个整数之后的所有内容

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

我的字符串是这样读的:

ex 1: BOL01RUM
ex 2: BOL050FAG

我只需要保留 BOL01 和 BOL050。修剪和 left() 不起作用,因为在某些行中我需要五个字符,而在其他一些行中我需要六个。 Substring_Index 不起作用,因为我没有可以用索引引用的重复分隔符。

有没有办法让 SQL 删除最后一个数字/整数之后的所有内容?我打算从这些字符串中仅获取 BOL01 或 BOL050。

根据以下答案添加注释:

MySQL Version is 5.6.10, and the character length of the string varies from nine to 12, so there is no way to use left or right trimming.

谢谢!

最佳答案

注意:这个答案是基于这样的假设(基于问题和评论),即字符串都以 3 个字符开头,然后有 2 或 3 个数字,后跟一个非数字和然后是未知数量的其他非数字字符。

您没有提及是要选择这些值还是更新表。如果您想选择它们,在应用程序级别对值进行后处理几乎肯定会更简单。但是,您可以使用此查询 (SQLFiddle) 在 MySQL 中实现您想要的:

SELECT IF(SUBSTRING(str, 6, 1) RLIKE '[0-9]', LEFT(str, 6), LEFT(str, 5))
FROM strings;

这将检查字符串中的第 6 个字符是否为数字,如果是,则返回最左边的 6 个字符,否则返回最左边的 5 个字符。

如果你想用新值更新表,这会更简单一些,你只需要运行两个更新查询(SQLFiddle):

UPDATE strings2 
SET str=LEFT(str,5)
WHERE str RLIKE '^...[0-9]{2}[^0-9]';
UPDATE strings2
SET str=LEFT(str,6)
WHERE str RLIKE '^...[0-9]{3}[^0-9]';

正如@Barmar 提到的,您还可以使用存储过程,例如

CREATE FUNCTION strip_tail(str VARCHAR(12)) RETURNS VARCHAR(6)
BEGIN
DECLARE i INT DEFAULT LENGTH(str);
WHILE SUBSTRING(str, i, 1) RLIKE '[^0-9]' DO
SET i = i - 1;
END WHILE;
RETURN SUBSTRING(str, 1, i);
END

关于mysql - 我需要删除最后一个整数之后的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50279838/

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