2014-02-06 5 views
-1

Я хотел бы этого поля данных:как отделить запятой в SQL

MaritalStatus=M;Youngest=[-0.999,0.999]; 

Сплит:

field name = Maritalstatus , data is M 
Field name = Youngest , Data is [-0.999,0.999]; 

Как написать SQL?

+0

Какую версию SQL Server вы используете? – Yuck

+0

Вы хотите, чтобы общая переменная varchar была разделена на строки пар ключ/значение. Это? – Nizam

+0

Да. SQLServer 2008. Я буду извлекать эти данные: MatStatus = M; Youngest = [- 0.999,0.999]; из другой таблицы. это поле данных не является фиксированным. могут быть изменены по-разному. Например, я могу получить Eldest = [0.99] только из этой таблицы. Я хотел бы разделить ряд пар ключ/значение в соответствии с изменением данных. помогите мне –

ответ

0

Это немного веселья с SUBSTRING и CHARINDEX, но это выполнимо только с 2 частями информации для извлечения:

select SUBSTRING(@string, 
      CHARINDEX('=', @string) + 1, 
      CHARINDEX(';', @string) - CHARINDEX('=', @string) - 1) as Maritalstatus, 
     SUBSTRING(@string, 
      CHARINDEX('=', @string, CHARINDEX(';', @string)) + 1, 
      LEN(@string) - CHARINDEX('=', @string, CHARINDEX(';', @string))) as Youngest 
+0

Спасибо. Но я точно не знаю имя поля данных и количество данных. как сделать . Пожалуйста, помогите мне. –

+0

Вам не нужны имена, в приведенном выше коде используются только '=' и ';', чтобы получить границу данных. – Szymon

0

Вы можете использовать следующий код в СП или создать определенную пользователем функцию, чтобы достичь своей цели

declare @commaSeperatedVal varchar(100) 
set @commaSeperatedVal='MaritalStatus=M;Youngest=[-0.999,0.999];' 
DECLARE @x XML 
SELECT @x = CAST('<A>'+ REPLACE(@commaSeperatedVal,';','</A><A>')+ '</A>' AS XML) 

select 'field name ='+ replace(Tval,'=' , ',data is ') from 
(
    SELECT t.value('.', 'varchar(100)') as Tval 
    FROM @x.nodes('A') AS x(t) 
) tbl 
where tbl.Tval<>'' 
+0

Извините. Я имею в виду, когда я извлекаю данные из таблицы. Я получу эти данные: MatStatus = M; Youngest = [- 0.999,0.999]; Затем я хотел бы выделить данные и поле. «Братство» будет полем. M будут данными. Когда я excute SQL, строка ключевого значения. Пожалуйста, помогите мне дать простой код. –

+0

Пожалуйста, ясно укажите, какой выход вы хотите? – himadri

+0

Я хотел бы получить это так: Я получу пример данных 'MatStatus = M; Youngest = [- 0.999,1.00];' из другой таблицы. Я бы хотел, чтобы я зарегистрировал это поле данных. Set filename = RelationshipStatus set value = M Если я вижу; Я хотел бы сделать цикл снова. В этом втором цикле я хотел бы назначить подобное set filed name = Youngest set value = [-0.999,1.00] Можете ли вы мне помочь. дайте мне образец кода. Заранее спасибо. –

Смежные вопросы