mysql - 定位文本位置,提取文本并插入 MySQL 中的新列

标签 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

如何实现:比如我要找国家

  1. 我需要在此文本列中找到国家/地区的位置。这逐行变化。
  2. 然后我需要忽略参数“Country=”,只提取值。在某些情况下,这将为 NULL(如 Row2 中的示例),而在某些行中,我需要值后跟“=”(如 Row1 和 Row3 中的示例)。但是,我需要确保我只获得值(value)。不是下一个用'&'分隔的参数
  3. 提取 Country 参数的值后,我需要创建一个新列,现在将在其中提取和存储这些值。

最终结果:新列

              Column B                                                

Row1            USA                            
Row2                              
Row3           Canada                                  

如有任何帮助,我们将不胜感激!谢谢!

最佳答案

您可以选择“Country=”之后的文本,然后一旦有了该子字符串,就可以选择第一个“&”之前的文本

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(ColumnA, 'Country=', -1), '&', 1) AS ColumnB
FROM `atable`

参见 http://dev.mysql.com/doc/refman/5.6/en/string-functions.html#function_substring-index


这里有一个测试来证明:

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!           |
+------+----------------------------+

关于mysql - 定位文本位置,提取文本并插入 MySQL 中的新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26434919/

相关文章:

在 cleardb 中执行和插入时出现 PHP PDO 错误

swift - 如何对字符串日期数组进行排序

c++ - 为什么 stringstream 停止接收字符串? [C++]

javascript - 控制台日志不打印函数中的变量

c - POSIX 函数的返回值

mysql - 根据外部条件从联接中仅选择一行

mysql - 如何为 MySQL 中的每个新连接自动调用查询?

php - SQL中如何选择字段并对每个字段进行计数?

java - 将希伯来语单词转换为英语字符

python - python函数是否有可能返回超过1个值?