在MySQL中定位文本位置、提取文本并插入新列
下面是MySQl表中的行示例在MySQL中定位文本位置、提取文本并插入新列,mysql,string,return-value,extract,Mysql,String,Return Value,Extract,下面是MySQl表中的行示例 Column A Row1 Lauguage=English&Country=USA&Gender=Male Row2 Gender=Female&Language=French&Country= Row3 Country=Canada&Gender=&Language=English 如何实现以下目标:例如,我需要寻找国家 我需要在这个文本栏中找到国家的位置。
Column A
Row1 Lauguage=English&Country=USA&Gender=Male
Row2 Gender=Female&Language=French&Country=
Row3 Country=Canada&Gender=&Language=English
如何实现以下目标:例如,我需要寻找国家
Column B
Row1 USA
Row2
Row3 Canada
任何帮助都将不胜感激!谢谢 您可以选择“Country=”后面的文本,然后在获得该子字符串后,选择第一个“&”之前的文本
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(ColumnA, 'Country=', -1), '&', 1) AS ColumnB
FROM `atable`
看
下面是一个测试来演示:
mysql> SELECT * FROM atable;
+------+------------------------------------------+
| row | columna |
+------+------------------------------------------+
| Row1 | Lauguage=English&Country=USA&Gender=Male |
| Row2 | Gender=Female&Language=French&Country= |
| Row3 | Country=Canada&Gender=&Language=English |
+------+------------------------------------------+
mysql> SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(ColumnA, 'Country=', -1), '&', 1) AS ColumnB FROM atable;
+---------+
| ColumnB |
+---------+
| USA |
| |
| Canada |
+---------+
下面是你的问题:
INSERT INTO atable VALUES ('Row4', 'Gender=&Language=English');
SELECT `row`, IF(LOCATE('Country=', ColumnA)>0,
COALESCE(
NULLIF(SUBSTRING_INDEX(SUBSTRING_INDEX(ColumnA, 'Country=', -1), '&', 1), ''),
'Blank string is not valid!'),
'Missing Country!') AS ColumnB
FROM `atable`
+------+----------------------------+
| row | ColumnB |
+------+----------------------------+
| Row1 | USA |
| Row2 | Blank string is not valid! |
| Row3 | Canada |
| Row4 | Missing Country! |
+------+----------------------------+
然而,在SQL中,我有一个完全相同的问题,对于任何想要SQL答案的人,请参见Tim Biegeleisen评论
为什么要把这样的数据放在表中?规范化使用
LOCATE()
和SUBSTRING()
函数。不幸的是,这在SQL中很复杂,因为您需要使用对LOCATE()
的嵌套调用来查找结束它的&
。谢谢,但这似乎只适用于第3行中的示例。参数Country=的位置不一致。它可以是第一个参数,也可以是第五个参数。有没有办法找到Country=然后查找下一个“&”并获得要显示的值?在excel中试用:1。列数据存储在A1 2中。查找存储在B1列3中的(“Country=,A1)->(国家位置)。IFERROR(FIND(“=”A1,B1),LEN(A1)->(位置=)存储在列C1 4中。IFERROR(FIND(“&”,A1,C1),LEN(A1)+1)->(结束位置)存储在列D1 5中。MID(A1,C1+1,D1-C1-1)->在单元格中显示国家/地区值E1@Nowitz41,我测试了它并包含了上面的输出。感谢您的输出。现在可以工作了!对于参数Country=为空(例如:Country=&)的行,快速跟进如果Country=不存在,是否有办法添加此错误检查功能?因此,这只会更新Country=具有“有效”值的行。感谢您的帮助!感谢您的帮助!@nowiz41,太好了,我很乐意提供帮助。顺便说一句,在StackOverflow上,习惯上用向上投票或“接受答案”标记有用的答案.
create table elb_logs(row varchar(100), url varchar(100));
insert into elb_logs values("Row1", "Lauguage=English&Country=USA&Gender=Male");
SELECT
row,
CASE WHEN POSITION('Country=' IN url) > 0
THEN SPLIT_PART(SPLIT_PART(url, 'Country=', 2), '&', 1)
ELSE 'Missing Country!' END AS ColumnB
FROM elb_logs;