我有一个包含字符串的表。其中一些以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://
想要提取字符串
答案 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;
当SUBSTRING_INDEX
函数找不到delim字符串时,它将返回原始字符串,而不是NULL
。
SELECT substring_index('abc','.',-1)
=>
abc
答案 2 :(得分:0)
使用正则表达式。更简单。
从mytable中选择mycol,其中mycol REGEXP'^ http://.+';