2015-05-28 2 views
0

Я пытаюсь разобрать строку с использованием SQL, но я тоже все еще участвую. У меня есть текст в элементе управления или поле 685, которое является переменным, но всегда в одном формате.SQL parse text в поле

поле 685 ввода

arr[hg19] 2q33.3q34(200,900,700-209,000,000)x2 xxx 

Желаемая выход

2:200900700-209000000 

В принципе, # после [hg19], но перед д (также может быть ар) и #» s в() без запятых.

Моя попытка (хотя я не уверен в этом на всех)

Большое спасибо :).

SELECT PARSENAME(REPLACE('[685]', ' ', '.'), 2, 3, 4) 
+0

Почему бы вам не сделать это в SQL, а не в PHP, C# или любом другом языке, который вы используете? – Becuzz

+0

Приложение написано на SQL, поэтому мне нужна кнопка для синтаксического анализа в SQL. Я согласен, что языки сценариев на скриптах будут идеальными. Спасибо :). – Chris

ответ

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,@[email protected]) + ':' + 
     REPLACE(SUBSTRING(@s,@ixLParen+1,@[email protected]),',','') + '-' + 
     REPLACE(SUBSTRING(@s,@ixMinus+1,@[email protected]),',','') 
+0

может 'set @s = '[685]'' .... [685] - это элемент управления, в который будет вставлен вход (поскольку он будет меняться каждый раз). Спасибо :). – Chris

+0

Да, вы должны иметь возможность устанавливать '@ s' все, что пожелаете. – johnjps111

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),',','') 
+1

Спасибо вам обоим :) – Chris