在两个特定字符之间取数字

时间:2019-03-07 20:29:19

标签: mysql

我有如下链接

https://www.example.com/xy-pz-p123456789.html

我想从此链接使用mysql查询提取数字'123456789'。

我有以下查询来提取最后一个-p

之后的所有内容
SELECT id, RIGHT(`internal_id`,LOCATE('p',reverse(`internal_id`)) - 1) from pricing_dm where `id` = 1

查询返回:123456789.html

我有以下查询来获取“ .html”的所有内容

SELECT id, left(`internal_id`,LOCATE('.html',`internal_id`) - 1) from pricing_dm where `id` = 1

查询返回https://www.example.com/xy-pz-p123456789

有没有一种方法可以将这两个查询合并到一个查询中呢?

非常感谢您。

3 个答案:

答案 0 :(得分:2)

您可以使用以下查询来做到这一点:

SELECT SUBSTRING_INDEX(
     SUBSTRING_INDEX('https://www.example.com/xy-pz-p123456789.html', '-p', -1), '.' ,1);

样品

MariaDB [(none)]> SELECT SUBSTRING_INDEX(
    ->  SUBSTRING_INDEX('https://www.example.com/xy-pz-p123456789.html', '-p', -1), '.' ,1);
+-------------------------------------------------------------------------------------------------------+
| SUBSTRING_INDEX(
 SUBSTRING_INDEX('https://www.example.com/xy-pz-p123456789.html', '-p', -1), '.' ,1) |
+-------------------------------------------------------------------------------------------------------+
| 123456789                                                                                             |
+-------------------------------------------------------------------------------------------------------+
1 row in set (0.000 sec)

MariaDB [(none)]> 

答案 1 :(得分:0)

我的建议是使用正则表达式

https://dev.mysql.com/doc/refman/8.0/en/regexp.html

类似mysql> SELECT REGEXP_SUBSTR('internal_id', '(.*)\d*\(.html)');(。)\ d .html

答案 2 :(得分:0)

您可以使用MySql转换技巧:

https://www.db-fiddle.com/f/oC7zRWks24b4QCS4B3RoA1/0

SELECT RIGHT(`internal_id`,LOCATE('p',reverse(`internal_id`)) - 1)+0
FROM pricing_dm