substring_index没有确切的前缀

时间:2019-04-13 09:03:11

标签: mysql select substring

我有一个包含字符串的表。其中一些以https://开头,另一些以http://开头。我想提取以http://开头的那些(不包含s)。请注意,由于我在处理此字符串的计划中存在另一个冲突,因此我不想使用LIKE语句。因此,如果在mycol的{​​{1}}列中有以下项目:

mytable

我进行以下查询:

https://111.com/
https://www.222.com/en-gb/

我仍然在结果中得到这些字符串:

SELECT `mytable`.`mycol`, substring_index(`mytable`.`mycol`,'http://',-1)

为什么?由于我的查询正在寻找https://111.com/ https://www.222.com/en-gb/ 而不是http://,为什么我得到的结果以https://开头?在这个简单的示例中,它不返回任何内容,因为没有以https://

开头的字符串

想要提取字符串

3 个答案:

答案 0 :(得分:0)

  

我想提取那些以http://

开头的内容

如果您不想使用LIKE,则可以使用left()

select right(columnname, length(columnname) - 7) from tablename
where left(columnname, 7) = 'http://'

您不需要知道字符串的长度。
您只需要提取第一个7个字符之后的字符串部分。
这部分的长度是:

length(columnname) - 7

请使用right()

答案 1 :(得分:0)

您可以添加对分度的检查:

SELECT `mycol`,
   IF(instr(mycol,'http://') > 0, substring_index(`mytable`.`mycol`,'http://',-1),NULL)
FROM mytable;

db<>fiddle demo


SUBSTRING_INDEX函数找不到delim字符串时,它将返回原始字符串,而不是NULL

SELECT substring_index('abc','.',-1)
=>
abc

答案 2 :(得分:0)

使用正则表达式。更简单。

从mytable中选择mycol,其中mycol REGEXP'^ http://.+';