我试图找出如何创建单个MySQL查询,这将允许我只显示字符串后面的接下来的10个字符" filter"在“消息”字段中。字符串"过滤器"出现在每个记录的不同位置,因此我无法使用位置过滤器。
我一直在尝试使用类似下面的内容,但是我无法获得正确的查询。
SELECT RIGHT(Message,LOCATE('filter',Message) - 10) FROM table
表中的消息字段记录如下所示:
QgySSW8fwD25iQ.filter0019p3las1-31205-59C3D
6t2fJw.filter0010p3las1-9745-59
filter0025p3las1-13130-59C3D317
在查询之后,我正在寻找它们:
0019p3las1
0010p3las1
0025p3las1
非常感谢任何帮助。
答案 0 :(得分:1)
在SUBSTRING()中使用LOCATE()的组合。见SQL Fiddle
CREATE TABLE Table1
(`message` varchar(200))
;
INSERT INTO Table1
(`message`)
VALUES
('QgySSW8fwD25iQ.filter0019p3las1-31205-59C3D'),
('6t2fJw.filter0010p3las1-9745-59'),
('filter0025p3las1-13130-59C3D317')
;
查询1 :
select
SUBSTRING(message,LOCATE('filter',Message)+6,10)
from table1
请注意,+ 6将偏移"过滤器"因为LOCATE找到" f"的位置然后你需要为其他角色添加6" ilter"。确定该数字后,只需获得接下来的10个字符。
<强> Results 强>:
| SUBSTRING(message,LOCATE('filter',Message)+6,10) |
|--------------------------------------------------|
| 0019p3las1 |
| 0010p3las1 |
| 0025p3las1 |
答案 1 :(得分:0)
请参阅SQLFiddle。
结果表结构
Create table resulttbl (
id int(6) primary key auto_increment ,
resultFIlter varchar(1000)
);
分割字符串的功能
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 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 ;
使用语句CALL FilterTable()
调用该过程。
现在,您可以在表resulttbl
上找到您的程序结果。
您可以使用select
语句SELECT * from resulttbl
从该表中获取值。
<强>结果强>
id resultFIlter
1 0019p3las1
2 0010p3las1
3 0025p3las1