我正在尝试使用SQL解析字符串,但我也在学习。我在控件或字段685中有文本是可变的,但总是相同的格式。
字段685输入
arr[hg19] 2q33.3q34(200,900,700-209,000,000)x2 xxx
所需的输出
2:200900700-209000000
基本上,[hg19]之后但在q之前的#(也可能是p)和()中没有逗号的#。
我的尝试(尽管我根本没有信心)
非常感谢:)。
SELECT PARSENAME(REPLACE('[685]', ' ', '.'), 2, 3, 4)
答案 0 :(得分:1)
这对我有用。代码应该解释自己:使用您对输入的了解以及重复使用CHARINDEX和SUBSTRING来解决。您可以将其组合成一长串不可读的代码,或按原样使用:
declare @s as varchar(100)
set @s = 'arr[hg19] 23q33.3q34(200,900,700-209,000,000)x2 xxx'
declare @ixBrace as integer; set @ixBrace = CHARINDEX(']',@s,0)
declare @ixP as integer; set @ixP = CHARINDEX('p',@s,@ixBRace)
declare @ixQ as integer; set @ixQ = CHARINDEX('q',@s,@ixBRace)
declare @ixPQ as integer; set @ixPQ = case when @ixP = 0 then @ixQ when @ixQ = 0 then @ixP when @ixP < @ixQ then @ixP else @ixQ end
declare @ixLParen as integer; set @ixLParen = CHARINDEX('(',@s,@ixPQ)
declare @ixMinus as integer; set @ixMinus = CHARINDEX('-',@s,@ixLParen)
declare @ixRParen as integer; set @ixRParen = CHARINDEX(')',@s,@ixMinus)
select SUBSTRING(@s,@ixBrace+1,@ixPQ-@ixBrace-1) + ':' +
REPLACE(SUBSTRING(@s,@ixLParen+1,@ixMinus-@ixLParen-1),',','') + '-' +
REPLACE(SUBSTRING(@s,@ixMinus+1,@ixRParen-@ixMinus-1),',','')
答案 1 :(得分:0)
我不确定'2:'来自哪里所以我猜它来自'x2'
DECLARE @input VARCHAR(100) = 'arr[hg19] 2q33.3q34(200,900,700-209,000,000)x2 xxx'
SELECT SUBSTRING(@input,PATINDEX('%x[0-9]%',@input) + 1,CHARINDEX(' xxx',@input) - PATINDEX('%x[0-9]%',@input) - 1) + ':' +
REPLACE(SUBSTRING(@input,CHARINDEX('(',@input) + 1,CHARINDEX(')',@input) - CHARINDEX('(',@input) - 1),',','')