Sql 我们不太依赖于轶事结果,而是基于逻辑、文档、深入研究源代码等我们所知道的。这与视图中的SELECT TOP 100%…ORDER BY…不同。在那里,这个定义实际上没有任何意义,优化器完全合理地避免了排序。同样,如果它没有省略它(并保证不这样做,但它没有)

Sql 我们不太依赖于轶事结果,而是基于逻辑、文档、深入研究源代码等我们所知道的。这与视图中的SELECT TOP 100%…ORDER BY…不同。在那里,这个定义实际上没有任何意义,优化器完全合理地避免了排序。同样,如果它没有省略它(并保证不这样做,但它没有),sql,sql-server,Sql,Sql Server,我们不太依赖于轶事结果,而是基于逻辑、文档、深入研究源代码等我们所知道的。这与视图中的SELECT TOP 100%…ORDER BY…不同。在那里,这个定义实际上没有任何意义,优化器完全合理地避免了排序。同样,如果它没有省略它(并保证不这样做,但它没有),我仍然不能保证这些行将在一个串行计划中排序,但优化器没有理由这样做,因此它可以被依赖。@Charlieface只是几件事-是的,并行性(以及批处理模式、内联和谁知道还有什么)可能会在这方面产生影响。遵守“只要你不做x、y和z”的免责声明与依赖


我们不太依赖于轶事结果,而是基于逻辑、文档、深入研究源代码等我们所知道的。这与视图中的
SELECT TOP 100%…ORDER BY…
不同。在那里,这个定义实际上没有任何意义,优化器完全合理地避免了排序。同样,如果它没有省略它(并保证不这样做,但它没有),我仍然不能保证这些行将在一个串行计划中排序,但优化器没有理由这样做,因此它可以被依赖。@Charlieface只是几件事-是的,并行性(以及批处理模式、内联和谁知道还有什么)可能会在这方面产生影响。遵守“只要你不做x、y和z”的免责声明与依赖视图中的order by、从聚集索引排序等遇到同样的问题。
website
AA.AA/AB/123
www.google.com/en/abcd/
yahoo.com/us/dev
gmail.com

ouput
website
AA.AA/AB
www.google.com/en
yahoo.com/us
gmail.com
DECLARE @Table TABLE (Col1 NVARCHAR(100))
INSERT @Table VALUES
('website'),
('AA.AA/AB/123'),
('www.google.com/en/abcd/'),
('yahoo.com/us/dev'),
('gmail.com')



SELECT 
COALESCE(
    NULLIF(
        SUBSTRING(Col1,1,CHARINDEX('/',Col1,CHARINDEX('/',Col1)+1))
        ,'')
   ,Col1    
    ) AS Col1
FROM @Table
SELECT STRING_AGG(x.value, '/')
FROM dbo.table_name CROSS APPLY 
(
  SELECT value, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) 
  FROM STRING_SPLIT(Col1, '/') AS ss
) AS x(value, rn)
WHERE x.rn <= 2
GROUP BY Col1;
CREATE FUNCTION [dbo].[SplitString]
(
    @List NVARCHAR(MAX),
    @Delim VARCHAR(255)
)
RETURNS TABLE
AS
    RETURN ( SELECT [Value], idx = RANK() OVER (ORDER BY n) FROM 
      ( 
        SELECT n = Number, 
          [Value] = LTRIM(RTRIM(SUBSTRING(@List, [Number],
          CHARINDEX(@Delim, @List + @Delim, [Number]) - [Number])))
        FROM (SELECT Number = ROW_NUMBER() OVER (ORDER BY name)
          FROM sys.all_objects) AS x
          WHERE Number <= LEN(@List)
          AND SUBSTRING(@Delim + @List, [Number], LEN(@Delim)) = @Delim
      ) AS y
    );
;WITH src AS 
(
  SELECT Col1, idx, Value  
  FROM dbo.table_name CROSS APPLY dbo.SplitString(Col1, '/')
)
SELECT STUFF((SELECT '/' + Value
  FROM src
  WHERE src.idx <= 2 AND Col1 = t.Col1
  ORDER BY idx
  FOR XML PATH, TYPE).value(N'.[1]', N'nvarchar(max)'), 1, 1, '')   
FROM dbo.table_name AS t
GROUP BY Col1;
select case when str like '%/%' then left(str, i2-1) else str end as str
from t
cross apply (select charindex( '/', str ) as i1) t2           --position of first slash
cross apply (select charindex( '/', str, (i1 + 1)) as i2 ) t3 --position of second slash
SELECT  LEFT([colName], charindex('/', [colName], charindex('/', [colName])+1)-1) AS [AfterSecondPipe]
FROM    [Table_1]