[英]SELECT from 3rd comma in string
我有以下字符串:
bzip2,1,668,sometext,foo,bar
我怎樣才能只選擇sometext,foo,bar
? 第三個逗號之前的字符串長度可能不同,並且sometext,foo,bar
可能有逗號。
我想盡可能簡潔的代碼,即最好是1行代碼,沒有循環。 但隨意發布您認為的任何解決方案。
嘗試這個:
從第3個逗號到字符串結尾的子字符串。要查找3個逗號,我使用charindex()函數3次
declare @str varchar(50)='bzip2,1,668,some,text'
select substring(@str,
CHARINDEX(',',@str,CHARINDEX(',',@str,CHARINDEX(',',@str,1)+1)+1)+1,
LEN(@str)-CHARINDEX(',',@str,CHARINDEX(',',@str,CHARINDEX(',',@str,1)+1)+1))
結果 :
some,text
碼:
declare @input varchar(max) = 'bzip2,1,668,s,o,m,e,t,e,x,t,f,o,o,b,a,r'
--declare @input varchar(max) = 'bzip2,,'
declare @thirdCommaPosition int = nullif(charindex(',', @input, nullif(charindex(',', @input, nullif(charindex(',', @input, 1),0)+1),0)+1 ),0)
select stuff(@input, 1, @thirdCommaPosition, '')
輸出:
s,o,m,e,t,e,x,t,f,o,o,b,a,r
編輯
將nullif添加到第三個逗號計算部分,沒有它們就可能得到不一致的結果。
這是另一個想法
DECLARE @xml AS XML,@str AS VARCHAR(50)
SET @str='bzip2,1,668,sometext,foo,bar'
SET @xml = CAST(('<X>'+REPLACE(@str,',' ,'</X><X>')+'</X>') AS XML)
SELECT FinalResult = STUFF(@str,1,SUM(Length)+3,' ' ) FROM (SELECT
Rn = ROW_NUMBER() OVER(ORDER BY (SELECT 1))
,N.value('.', 'varchar(10)') as value
,Length = LEN(N.value('.', 'varchar(10)'))
FROM @xml.nodes('X') as T(N))X
WHERE X.Rn<=3
結果
sometext,foo,bar
我只想出了一些有用的東西:
declare @v varchar(max) = 'bzip2,1,668,sometext'
select substring(@v, CHARINDEX(',', @v, CHARINDEX(',', @v, CHARINDEX(',', @v)+1)+1)+1, len(@v))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.