Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何使用regex更新表行_Mysql_Sql - Fatal编程技术网

Mysql 如何使用regex更新表行

Mysql 如何使用regex更新表行,mysql,sql,Mysql,Sql,我有一个表,其中的行如下: |column A | |normal data 1 (some data to remove 1) | |normal data 2 (some data to remove 2)| |normal data 3 (some data to remove 3)| |normal data 4 (some data to remove 4)| |........

我有一个表,其中的行如下:

|column A                              |

|normal data 1 (some data to remove 1) |
|normal data 2 (some  data to remove 2)|
|normal data 3 (some  data to remove 3)|
|normal data 4 (some  data to remove 4)|
|........                              |
我想更新我的行,只保留普通数据并删除“()”中的数据
我想知道是否有一种方法可以在我的SQL update语句中使用正则表达式来删除“(”

我认为最简单的方法是
substring\u index()


如果后面还有一些数据,则必须像这样使用2子字符串(索引)

样本

mysql> SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('normal data 1 (some data to remove 1)', '(', 1),')',-1);
+------------------------------------------------------------------------------------------+
| SUBSTRING_INDEX(SUBSTRING_INDEX('normal data 1 (some data to remove 1)', '(', 1),')',-1) |
+------------------------------------------------------------------------------------------+
| normal data 1                                                                            |
+------------------------------------------------------------------------------------------+
1 row in set (0,00 sec)

mysql>

尝试使用replace、substring和position函数来消除()之间的数据

更新tablename set col=replace(col,substr(col,position(“(”在col中),position(“)”在col中)-position(“(”在col中)),”


然后它将更新()之间的所有数据,包括大括号。

这不是假设在预期的字符之前没有“(”字符吗?
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX( YourFieldName , '(', 1),')',-1);
mysql> SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('normal data 1 (some data to remove 1)', '(', 1),')',-1);
+------------------------------------------------------------------------------------------+
| SUBSTRING_INDEX(SUBSTRING_INDEX('normal data 1 (some data to remove 1)', '(', 1),')',-1) |
+------------------------------------------------------------------------------------------+
| normal data 1                                                                            |
+------------------------------------------------------------------------------------------+
1 row in set (0,00 sec)

mysql>