Mysql 正则表达式在sql中创建新列的用法
我在SQL表中有一列,如下所示:Mysql 正则表达式在sql中创建新列的用法,mysql,regex,Mysql,Regex,我在SQL表中有一列,如下所示: Column_name 123.ten.abc.Testing 1245.eng.xyz.sleeping 现在,我想填充一个列,该列在上次出现点(.)之前提取列值,并填充到新列中。 所以我的新专栏应该如下所示 New_column 123.ten.abc 1245.eng.xyz 在SQL中使用正则表达式如何实现这一点?我认为没有正则表达式也可以做到: update your_table set new_column = SUBSTR(old_column
Column_name
123.ten.abc.Testing
1245.eng.xyz.sleeping
现在,我想填充一个列,该列在上次出现点(.)之前提取列值,并填充到新列中。
所以我的新专栏应该如下所示
New_column
123.ten.abc
1245.eng.xyz
在SQL中使用正则表达式如何实现这一点?我认为没有正则表达式也可以做到:
update your_table
set new_column = SUBSTR(old_column, 1,
LENGTH(old_column) - LOCATE('.', REVERSE(old_column)));
如果要将值作为新行插入,请使用:
Insert into your_table (new_column)
Select SUBSTR(old_column, 1,
LENGTH(old_column) - LOCATE('.', REVERSE(old_column)))
From your_table;
注意:接受的答案不正确
考虑文本为
1245.eng.xyz.sleeping.sleeping
时的情况。接受的答案将只返回1245.eng.xyz
,而不是1245.eng.xyz.sleeping
我认为您可以在不使用正则表达式的情况下执行此操作:
update your_table
set new_column = SUBSTR(old_column, 1,
LENGTH(old_column) - LOCATE('.', REVERSE(old_column)));
如果要将值作为新行插入,请使用:
Insert into your_table (new_column)
Select SUBSTR(old_column, 1,
LENGTH(old_column) - LOCATE('.', REVERSE(old_column)))
From your_table;
注意:接受的答案不正确
考虑文本为
1245.eng.xyz.sleeping.sleeping
时的情况。接受的答案将只返回1245.eng.xyz
,而不是1245.eng.xyz.sleeping
假设您的表名为test,列名为value
,我们可以这样做:
- 获取最后一个
后的子字符串:
从测试中选择子字符串_索引(值',-1)代码>
- 现在,由于MySQL没有函数从另一个字符串中获取字符串的
最后一次出现
,我们需要反转该字符串并获取第一次出现。所以,reverse
我们从上一步得到的结果,得到长度
从测试中选择长度(反向(子字符串_索引(值“,”,-1))代码>
- 完成此操作后,我们可以反转整个字符串,从长度中获取子字符串(在上一步中找到),这将修剪该单词的最后一次出现,并再次反转它:
从测试中选择反转(SUBSTR(反转(值)、长度(反转(SUBSTRING_索引(值“,”,-1)))+2)代码>
这将为您提供所需的输出。这是
获得此值后,可以执行INSERT-in。。选择
语句以插入值,例如:
INSERT INTO TABLE2 (new_value)
SELECT REVERSE(SUBSTR(REVERSE(value), LENGTH(REVERSE(SUBSTRING_INDEX(value, '.', -1)))+2)) from test;
更新
更新答案以涵盖@GurV指出的边缘情况。假设您的表名为test,列名为value,我们可以这样做:
- 获取最后一个
后的子字符串:
从测试中选择子字符串_索引(值',-1)代码>
- 现在,由于MySQL没有函数从另一个字符串中获取字符串的
最后一次出现
,我们需要反转该字符串并获取第一次出现。所以,reverse
我们从上一步得到的结果,得到长度
从测试中选择长度(反向(子字符串_索引(值“,”,-1))代码>
- 完成此操作后,我们可以反转整个字符串,从长度中获取子字符串(在上一步中找到),这将修剪该单词的最后一次出现,并再次反转它:
从测试中选择反转(SUBSTR(反转(值)、长度(反转(SUBSTRING_索引(值“,”,-1)))+2)代码>
这将为您提供所需的输出。这是
获得此值后,可以执行INSERT-in。。选择
语句以插入值,例如:
INSERT INTO TABLE2 (new_value)
SELECT REVERSE(SUBSTR(REVERSE(value), LENGTH(REVERSE(SUBSTRING_INDEX(value, '.', -1)))+2)) from test;
更新
答案已更新,以涵盖@GurV指出的边缘情况。如果找到的子字符串出现两次或更多次,该怎么办?它不起作用。如果您找到的子字符串出现两次或更多次怎么办?这行不通。