SQL:从一列获取子字符串并将其插入其他列

时间:2016-10-31 14:13:31

标签: mysql sql regex

第一列包含图像文件名称:

abcd.jpg
abcdef.png
...
abcdjs.xyz

我想创建另一个包含这些图像文件扩展名的列:

jpg
png
... 
xyz

但有些图像文件的名称类似于ab.gefs.jpg

我无法在最后一个(。)点之后取string

2 个答案:

答案 0 :(得分:3)

您可以反转文件名,以便首先进行扩展并反转,然后找到第一个点,然后在点之前剪切所有内容 - 这将是反向扩展 - 然后再反转:

UPDATE some_table t1, some_table t2
SET t1.some_column = REVERSE(SUBSTRING(REVERSE(t2.filename) FROM 1 FOR LOCATE('.', REVERSE(t2.filename))))
WHERE t1.primary_key = t2.primary_key;

答案 1 :(得分:3)

MySQL的SUBSTRING_INDEX()功能非常适合你想要做的事情:

> select substring_index( 'foo.png', '.', -1 );
+---------------------------------------+
| substring_index( 'foo.png', '.', -1 ) |
+---------------------------------------+
| png                                   |
+---------------------------------------+
1 row in set (0.01 sec)

> select substring_index( 'foo.bar.jpg', '.', -1 );
+-------------------------------------------+
| substring_index( 'foo.bar.jpg', '.', -1 ) |
+-------------------------------------------+
| jpg                                       |
+-------------------------------------------+
1 row in set (0.00 sec)