如果我有两个substring_index,哪个首先执行?

时间:2019-04-13 09:51:20

标签: mysql database substring

如果我有两个substring_index,哪个首先执行?内部的substring_index( mycol ,'/',3)还是外部的?

substring_index(substring_index(`mycol`,'/',3),'://',-1)

我要治疗的刺痛示例:

https://www.yahoo.com/
http://google.com/en/

我想得到:

www.yahoo.com
google.com

1)首先执行哪个substring_index?根据首先执行的输出构造第二个substring_index,这一点很重要。

2)我的substring_index语句正确吗?

4 个答案:

答案 0 :(得分:0)

阿苏,您可以轻松检查

select substring_index(substring_index('https://www.yahoo.com/','/',3),'://',-1);

www.yahoo.com

select substring_index(substring_index('http://google.com/en/','/',3),'://',-1);

google.com

对于每个嵌套函数,总是执行内部的..以及相应地执行下一个外部

答案 1 :(得分:0)

外部substring_index()不能执行,除非存在要对其进行操作的值。
在这种情况下,要操作的值是:

substring_index(`mycol`,'/',3)

因此嵌套的substring_index()首先执行,并提供外部substring_index()所基于的值。
这是包括SQL在内的所有编程语言都评估表达式的方式。
关于第二个问题:是的,语句是正确的。

答案 2 :(得分:0)

作为使用SUBSTRING_INDEX的替代方法,如果您使用的是MySQL 8+,则可以使用正则表达式替换功能:

SELECT
    REGEXP_REPLACE('http://google.com/en/', 'https?://([^/]+)', '$1') AS url
FROM yourTable;

Demo

答案 3 :(得分:0)

  1. 括号中的语句始终具有更高的优先级。
  2. 内部子字符串索引仅修饰末尾的'/'字符。 (‘https://www.yahoo.com’)。外部子字符串索引会修剪“ https://”。 (“ www.yahoo.com”)。您的陈述很好。

您可以找到不同的用法或详细信息here