Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > Как распарсить строку?


Автор: Feller 24.5.2011, 17:31
Есть столбец в нём значение  FIO=1; LASTINDIC=0; и.т.д как можно его распарсить чтоб  FIO было название столбца а то что до точки с запятой его значение.Я сделал такой запрос но он не множко нетак работает например если строки LASTINDIC=0; небудет он выдаст ошибку  пожалуйста помогите smile 
Код

SUBSTRING(pmsg, ABS((CHARINDEX ('LASTINDIC', pmsg) -CHARINDEX ('LASTINDIC', pmsg)-(CHARINDEX ('FIO', pmsg)+LEN('FIO')+1))) ,CHARINDEX ('LASTINDIC', pmsg)-(CHARINDEX ('FIO', pmsg)+LEN('FIO')+1)-2 )as FIO,
       SUBSTRING(pmsg, ABS((CHARINDEX ('LASTDATE', pmsg) -CHARINDEX ('LASTDATE', pmsg)-(CHARINDEX ('LASTINDIC', pmsg)+LEN('LASTINDIC')+1))),CHARINDEX ('LASTDATE', pmsg)-(CHARINDEX ('LASTINDIC', pmsg)+LEN('LASTINDIC')+1)-2 )as LASTINDIC,


Автор: Akina 24.5.2011, 17:38
Описывайте задачу, а не свою попытку её решать.

Автор: Feller 24.5.2011, 17:48
Akina, 
есть колонка pmsg оно содержит всебе данные DEBT_AMOUNT=-300.00; FIO=1; LASTINDIC=0; LASTDATE=19.05.2011;
как его правильно распарсить чтоб вытащить его значения ?

Автор: Akina 24.5.2011, 19:47
Парсить каждый параметр надо независимо.

Если в строке есть параметр PARAMETER, то вернуть его значение, иначе ноль (или пустую строку) или NULL.

Код

CASE 
WHEN CHARINDEX('PARAMETER=', pmsg)>0 
THEN CAST(значение AS тип) 
ELSE ноль/пустая_строка/NULL 
END as PARAMETER

Значение берётся как подстрока. 

Начало подстроки - после знака "=". Его положение = CHARINDEX('PARAMETER=', pmsg)+LEN('PARAMETER=').
Конец подстроки - первый ";" после начала. Т.е. CHARINDEX(';', pmsg, CHARINDEX('PARAMETER', pmsg))
Соответственно длина значения = Конец_подстроки - Начало_подстроки.


Автор: Feller 26.5.2011, 08:38
Akina, Спасибо, smile то что надо

Автор: Akina 26.5.2011, 09:14
Если эта операция выполяется часто - задумайтесь о написании пользовательской функции.
Если, кроме того, ещё и критично по времени выполнения - то UDF.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)