Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 расспарсить поле  [new]
last_student
Guest
есть например поля:

1 | Иванов,Иван
2 | Васильев,Вася


подскажите, как получить их в такой форме:

1 | Иванов | Иван
2 | васильев | Вася
30 ноя 11, 18:30    [11685593]     Ответить | Цитировать Сообщить модератору
 Re: расспарсить поле  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
stuff, patindex
30 ноя 11, 18:32    [11685600]     Ответить | Цитировать Сообщить модератору
 Re: расспарсить поле  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
+ http://t-sql.ru/post/ParseStrings.aspx
30 ноя 11, 18:33    [11685604]     Ответить | Цитировать Сообщить модератору
 Re: расспарсить поле  [new]
last_student
Guest
Knyazev Alexey,

спасибо за ссылочку, сделал вот так


select distinct g.ID, substring(g.name, 1, PATINDEX ( '%,%' , g.name )), substring(g.name, PATINDEX ( '%,%' , g.name)+1, LEN(g.name)) 
from table g

30 ноя 11, 19:38    [11685875]     Ответить | Цитировать Сообщить модератору
 Re: расспарсить поле  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
last_student
Knyazev Alexey,

спасибо за ссылочку, сделал вот так


select distinct g.ID, substring(g.name, 1, PATINDEX ( '%,%' , g.name )), substring(g.name, PATINDEX ( '%,%' , g.name)+1, LEN(g.name)) 
from table g



лучше так:

select id
     , parsename( replace(g.name, ',','.'), 2 ) 
     , parsename( replace(g.name, ',','.'), 1 ) 
  from table g
30 ноя 11, 20:44    [11686124]     Ответить | Цитировать Сообщить модератору
 Re: расспарсить поле  [new]
Lasa
Member

Откуда: Canada
Сообщений: 81
Knyazev Alexey,

https://www.sql.ru/forum/actualthread.aspx?tid=864352&pg=1&mid=10933224&hl=while
30 ноя 11, 22:38    [11686587]     Ответить | Цитировать Сообщить модератору
 Re: расспарсить поле  [new]
last_student
Guest
Knyazev Alexey
last_student
Knyazev Alexey,

спасибо за ссылочку, сделал вот так


select distinct g.ID, substring(g.name, 1, PATINDEX ( '%,%' , g.name )), substring(g.name, PATINDEX ( '%,%' , g.name)+1, LEN(g.name)) 
from table g



лучше так:

select id
     , parsename( replace(g.name, ',','.'), 2 ) 
     , parsename( replace(g.name, ',','.'), 1 ) 
  from table g


еще раз спасибо!

к сожалению данные не везде в таком формате как я привел.
предыдущий запрос отработал коректнее...
1 дек 11, 11:16    [11688010]     Ответить | Цитировать Сообщить модератору
 Re: расспарсить поле  [new]
Miad
Member

Откуда:
Сообщений: 65
Если еще нужно. Строка с разделителями в виде таблицы.
last_student,
CREATE PROCEDURE [dbo].[docflow_unParsing_Delimiter_String]
@InputString varchar(1050), --входящая строка
@Delimiter varchar(1) --разделитель
	AS
		select substring(name, i2 + 1, i1 - i2 -1) name
			from (select t1.name,
						charindex( @Delimiter, t1.name + @Delimiter, number ) i1, 
						case when number = 0 then 0 
							else charindex( @Delimiter, t1.name + @Delimiter, number - 1 )
						end i2
					from (select @InputString as name) t1
						inner join master.dbo.spt_values t2 
							on t2.type = 'P' and number between 0 and len( t1.name )
				) t 
			where i1 != i2

GO

1 дек 11, 14:29    [11689593]     Ответить | Цитировать Сообщить модератору
 Re: расспарсить поле  [new]
last_student
Guest
Miad,

уже нет, но все равно спасибо!
буду иметь на заметку...
1 дек 11, 14:55    [11689878]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить