Friday, 24 September 2021

String Split and get nth values in Sql (or) nth highest salary in sql and alternative of string_split

 DECLARE @ AS VARCHAR(MAX) = 'param0,param1,param3,param4'

SELECT VALUE FROM

(

    SELECT VALUE , ROW_NUMBER() OVER (ORDER BY (SELECT null)) rn FROM STRING_SPLIT(@, ',')

)x where rn = 3

GO


OR


DECLARE @str VARCHAR(100) = 'param0,param1,param3,param4';

SELECT *

FROM OPENJSON('["' +  REPLACE(@str,',','","') + '"]')

-----------


Get value By position in the string:

DECLARE @str VARCHAR(100) = 'param0,param1,param3,param4';

SELECT *

FROM OPENJSON('["' +  REPLACE(@str,',','","') + '"]')

WHERE [key]=2;


--------------------------

String_split altenative for string split with position: 


DECLARE @dlmt NVARCHAR(10)=N',';

DECLARE @pos INT = 2;

declare @input varchar(max)= 'a,b,c';

SELECT CAST(N'<x>' + REPLACE(@input,@dlmt,N'</x><x>') + N'</x>' AS XML).value('/x[sql:variable("@pos")][1]','nvarchar(max)')