我有一个具有以下布局的数据库表,包含 100.000 个条目:
id | url
1 | http://www.foo.com/ZedFe.htm
2 | www.foo.com/tEzqz.htm?q=eee
3 | foo.com/ZeeFg.htm
4 | http://www.foo.com/lkeiO
etc.
我现在想要第三列,其中包含每个 url 的 5 字符代码,但正如您所见,并非每个 url 的格式都相同。 在 php 中,我会这样做:
$id = substr($url, strpos($url,'foo.com/') + 8, 5);
这可以在 MySQL 中使用 LOCATE() 和 SUBSTR() 函数完成吗?
最佳答案
另一个我认为更常见的观点是,字符串操作是 SQL 中完全合法的一部分,并且将它们用于您所描述的目的是非常合适的。
这是基本列表 - 您会找到您熟悉的内容 - 使用 CONCAT,因为没有等效的运算符。
http://dev.mysql.com/doc/refman/5.5/en/string-functions.html
当我搜索“mysql sql parse url”时,我发现了很多例子。一个有趣的示例:
SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(TRIM(LEADING
"https://" FROM TRIM(LEADING "http://" FROM TRIM(url))), "/", 1), ":",
1), ".", IF(url LIKE "%.org.__%" OR url LIKE "%.net.__%" OR url LIKE
"%.com.__%" OR url LIKE "%.__.us%" OR url LIKE "%.co.__%" OR url LIKE
"%.__.uk%", -3, -2) )
关于mysql - 如何组合 MySQL 中的 LOCATE() 和 SUBSTR() 函数来创建新列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6537775/