Mysql 选择特定字符串后面的下10个字符
我正试图找出如何创建一个MySQL查询,该查询将允许我在消息字段中仅显示字符串“filter”后面的10个字符。字符串“filter”出现在每条记录的不同位置,因此我不能使用位置过滤器 我一直在尝试使用下面的内容,但是我无法获得正确的查询Mysql 选择特定字符串后面的下10个字符,mysql,substr,locate,Mysql,Substr,Locate,我正试图找出如何创建一个MySQL查询,该查询将允许我在消息字段中仅显示字符串“filter”后面的10个字符。字符串“filter”出现在每条记录的不同位置,因此我不能使用位置过滤器 我一直在尝试使用下面的内容,但是我无法获得正确的查询 SELECT RIGHT(Message,LOCATE('filter',Message) - 10) FROM table 表中的消息字段记录如下所示: QgySSW8fwD25iQ.filter0019p3las1-31205-59C3D 6t2fJw.
SELECT RIGHT(Message,LOCATE('filter',Message) - 10) FROM table
表中的消息字段记录如下所示:
QgySSW8fwD25iQ.filter0019p3las1-31205-59C3D
6t2fJw.filter0010p3las1-9745-59
filter0025p3las1-13130-59C3D317
我希望他们在查询后看起来像这样:
0019p3las1
0010p3las1
0025p3las1
非常感谢您的帮助。请参阅
结果表结构
Create table resulttbl (
id int(6) primary key auto_increment ,
resultFIlter varchar(1000)
);
CREATE PROCEDURE FilterTable()
BEGIN
DECLARE i INTEGER;
DECLARE endpos INTEGER;
DECLARE fullstr VARCHAR(1000);
DECLARE result VARCHAR(1000);
SET fullstr = 'QgySSW8fwD25iQ.filter0019p3las1-31205-59C3D 6t2fJw.filter0010p3las1-9745-59 filter0025p3las1-13130-59C3D317';
SET i = 2;
SET endpos=LENGTH(fullstr) - LENGTH(REPLACE(fullstr, 'filter', '')) ;
delete from resulttbl;
REPEAT
SET result=strSplit(fullstr, 'filter', i);
IF result IS NOT NULL THEN
SET result=LEFT(result,10);
INSERT INTO resulttbl (resultFIlter) values(result);
END IF;
SET i = i + 1;
UNTIL i >= endpos
END REPEAT;
END ;
用于拆分字符串的函数
CREATE FUNCTION strSplit(x VARCHAR(65000), delim VARCHAR(12), pos INTEGER)
RETURNS VARCHAR(65000)
BEGIN
DECLARE output VARCHAR(65000);
SET output = REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos)
, LENGTH(SUBSTRING_INDEX(x, delim, pos - 1)) + 1)
, delim
, '');
IF output = '' THEN SET output = null; END IF;
RETURN output;
END;
要拆分并插入结果表的存储过程
Create table resulttbl (
id int(6) primary key auto_increment ,
resultFIlter varchar(1000)
);
CREATE PROCEDURE FilterTable()
BEGIN
DECLARE i INTEGER;
DECLARE endpos INTEGER;
DECLARE fullstr VARCHAR(1000);
DECLARE result VARCHAR(1000);
SET fullstr = 'QgySSW8fwD25iQ.filter0019p3las1-31205-59C3D 6t2fJw.filter0010p3las1-9745-59 filter0025p3las1-13130-59C3D317';
SET i = 2;
SET endpos=LENGTH(fullstr) - LENGTH(REPLACE(fullstr, 'filter', '')) ;
delete from resulttbl;
REPEAT
SET result=strSplit(fullstr, 'filter', i);
IF result IS NOT NULL THEN
SET result=LEFT(result,10);
INSERT INTO resulttbl (resultFIlter) values(result);
END IF;
SET i = i + 1;
UNTIL i >= endpos
END REPEAT;
END ;
使用语句callfiltertable()
调用该过程。
现在,您的过程结果可在表resulttbl
中找到。
您可以使用select
语句作为select*fromsresulttbl
从该表中获取值
结果
id resultFIlter
1 0019p3las1
2 0010p3las1
3 0025p3las1
在子字符串()中使用LOCATE()的组合。看到这个了吗 查询1:
select
SUBSTRING(message,LOCATE('filter',Message)+6,10)
from table1
| SUBSTRING(message,LOCATE('filter',Message)+6,10) |
|--------------------------------------------------|
| 0019p3las1 |
| 0010p3las1 |
| 0025p3las1 |
请注意+6是“filter”长度的偏移量,因为LOCATE查找“f”的位置,然后需要为其他字符“ilter”添加6。一旦确定了这个数字,就只需获得接下来的10个字符
:
select
SUBSTRING(message,LOCATE('filter',Message)+6,10)
from table1
| SUBSTRING(message,LOCATE('filter',Message)+6,10) |
|--------------------------------------------------|
| 0019p3las1 |
| 0010p3las1 |
| 0025p3las1 |
这是您的预期输出吗?