MS SQL中的子串以获得所需的o / p

时间:2014-03-13 08:43:01

标签: sql sql-server substring

在名为" server_url"的列中有链接:

在.com之后总会有一个" /"当下。

我想只获得域名作为输出:www.abc.com,www.abcd.com

必须从头开始删除http://以及第三个" \"之后的任何内容。

试过:

SUBSTRING( server_url, (charindex(':',server_url)+3), (charindex('/',server_url,10))) 

我删除了http。但它并没有在第三个'之后删除该部分。

请建议执行相同的功能。

3 个答案:

答案 0 :(得分:2)

第三个参数是length,所以你需要在开始时删除被忽略部分的长度,所以就像(小心栅栏帖子):

SUBSTRING( server_url, (charindex(':',server_url)+3), (charindex('/',server_url,10) - (charindex(':',server_url)+3))) 

答案 1 :(得分:1)

假设SQL Server,这似乎有效:

declare @t table (server_url varchar(max) not null)
insert into @t(server_url) values
('http://www.abc.com/xyz/cv'),
('https://www.abc.com/lmn/rq'),
('https://www.abcd.com/kl')

;With Positions as (
    select server_url,
      CASE WHEN SUBSTRING(server_url,5,1)='s' THEN 8 ELSE 7 END as StartPosition,
      CHARINDEX('/',server_url,9) as EndPosition
    from @t
)
select SUBSTRING(server_url,StartPosition,EndPosition-StartPosition)
from Positions

我可以通过多次重复StartPosition CASE表达式来实现没有公用表表达式,但我觉得这更清晰。

答案 2 :(得分:0)

SELECT CONCAT(
          SUBSTRING_INDEX(
             SUBSTRING_INDEX(server_url', '.com/', 1), '//', -1
                          ), '.com'
              )