字段

时间:2015-05-28 16:50:05

标签: sql-server

我正在尝试使用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)

2 个答案:

答案 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),',','')