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]