【问题标题】:SQL substring codeSQL 子字符串代码
【发布时间】:2014-11-20 17:44:13
【问题描述】:

我有两个问题 给定一个名为 URL 的列(在链接表中),其中包含 url 的示例。

http://facebook.com/hello 之类的东西我需要提取所有内容直到第一个 / 所以 http://facebook.com 或者 https://www.cnn.com/video/data/2.0/video/tech/2014/10/30/pkg-future-of-travel-jet-engine-leap-plane.cnn.html 输出将是 https://cnn.com

这就是我所拥有的,但我不确定它的逻辑是否准确。

select distinct SUBSTRING (url,0,(CHARINDEX('/'), URL,0)) 
from links

我还需要一个 MYSQL 版本。我不完全确定我所拥有的是什么。 请指教。 谢谢

【问题讨论】:

    标签: mysql tsql char find substring


    【解决方案1】:

    select substr(url, 1, locate('/', url, (locate('//', url)+3))-1) from ...

    例如:

    select substr('abc://bott.com/xxxx', 1, locate('/', 'abc://bott.com/xxxx', (locate('//', 'abc:/ /bott.com/xxxx')+3))-1)

    返回这个:

    abc://bott.com

    'distinct' 将导致您只获得任何结果之一(不匹配)。

    【讨论】:

    • 是的,它会跳过它并寻找它之后的第一个'/'。
    • 抱歉,我会用列名替换 'abc://bott.com/xxxx' 吗?
    • 使用答案的第一行并将您的 from 和 where 子句添加到该行。 - 你的专栏被命名为“url”对吗?
    • 是的,所以应该是select substr(URL, 1, locate('/', URL, (locate('//', URL)+3))-1) from tableName
    【解决方案2】:

    你正在寻找这个:

    SELECT SUBSTRING_INDEX('http://facebook.com/hello', '/', 3);
    
    => "http://facebook.com"
    

    【讨论】:

    • 首先是她。但其次,表格中每一行的 url 都不同,facebook 只是一个例子。我需要使用 / 作为一个分界点来找到我需要的东西。
    • 好吧,它部分正确,SELECT SUBSTRING_INDEX('www.facebook.com/hello', '/', 3); 怎么样?即如果 URL 没有 http/swww 而不是?
    • @AbhikChakraborty 上面的命令适用于所有 URL 类型
    【解决方案3】:

    这是一种方法,假设您可能有http://https:// 或只有www 这个想法是首先用不同的字符替换//,比如||,然后使用substring_index解析字符串直到第一次出现/,最后用//替换||

    这里有一些例子

    mysql> select replace(substring_index(replace('http://facebook.com/hello','//','||'),'/',1),'||','//') as url;
    +---------------------+
    | url                 |
    +---------------------+
    | http://facebook.com |
    +---------------------+
    
    
    mysql> select replace(substring_index(replace('www.facebook.com/hello','//','||'),'/',1),'||','//') as url;
    +------------------+
    | url              |
    +------------------+
    | www.facebook.com |
    +------------------+
    
    
    
    mysql> select replace(substring_index(replace('http://www.facebook.com/hello/a/b/c','//','||'),'/',1),'||','//') as url;
    +-------------------------+
    | url                     |
    +-------------------------+
    | http://www.facebook.com |
    +-------------------------+
    
    mysql> select replace(substring_index(replace('http://facebook.com/hello/a/b/c','//','||'),'/',1),'||','//') as url;
    +---------------------+
    | url                 |
    +---------------------+
    | http://facebook.com |
    +---------------------+
    

    【讨论】:

    • 这看起来很酷,但我不想替换我只是想提取。拉出根网址。
    • 替换只是为了使公式起作用,以便它从左侧搜索/,因为在第一个/之后可能有很多/,所以我们不能从右到左查看。所以它应该给你你需要的东西。直到第一个/ 之前的确切网址没有改变任何东西:-) 我在答案中添加了更多测试。
    • 如果您获得的链接被一列替换?它应该仍然有效吗? (如果该列中包含整个 url)
    • 是的,在这种情况下应该是select replace(substring_index(replace(your_col_name,'//','||'),'/',1),'||','//') as url from table_name;
    • 我可以使用 distinct 对吗? select distinct replace(substring_index(replace(URL,'//','||'),'/',1),'||','//') as url from tableName;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多