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

Откуда:
Сообщений: 271
Вчера на этом форуме нашел тему по поводу парсинга строки
Для получения правильного результата советовали использовать:
declare @str varchar(1024)
set @str=',140030,Московская обл,Люберецкий р-н,,Малаховка п,Касимовское ш,3,Б,'
select @str='select '''+replace(@str, ',', ''' as val union all select ''')+''''
declare @t table(id int identity, val varchar(100))
insert into @t
exec (@str)
select val from @t where val!='' order by id;


Может кому не сложно, объяснить вот этот участок
'select '''+replace(@str, ',', ''' as val union all select ''')+''''

Не могу разобраться, почему именно такое количество '
На сколько понял, "," меняются на символ окончания строки при помощи "union all select"
Прошу не ругать если ошибаюсь)
1 июл 15, 17:52    [17839525]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
ну так в конце выводится результат из таблицы @t

Строка разбивается на части с разделителем , и эти части пишутся в переменную таблицу.
Затем выбираются оттуда и на экране виден список кусков строки
1 июл 15, 18:11    [17839633]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
то есть

select '140030' as val union all 'Московская обл' as val

...
1 июл 15, 18:13    [17839641]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
2viper2viper
Не могу разобраться, почему именно такое количество '
Потому что одиночная кавычка внутри литеральной строки должна удваиваться.

Массивы и списки в SQL Server

Функция, которая делит строку на слова
2 июл 15, 09:55    [17841638]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг  [new]
2viper2viper
Member

Откуда:
Сообщений: 271
iap, спасибо, это то что спрашивал
4 июл 15, 12:19    [17851833]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг  [new]
2viper2viper
Member

Откуда:
Сообщений: 271
строку
select @str='select '''+replace(@str, ',', ''' as val union all select ''')+''''

с учетом удвоенной кавычки можно прочитать
select @str=  'select '+replace(@str, ',', ' as val union all select ')+''

Но зачем в конце строки +'''' - четыре кавычки (одна добавляется и одна закрывает строку), а не одна закрывающая строку?
6 июл 15, 09:21    [17855798]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг  [new]
Guf
Member

Откуда: Новосибирск
Сообщений: 647
2viper2viper
Но зачем в конце строки +'''' - четыре кавычки?

Одна, открывает строку, две - превращаются в одну = содержимое, одна закрывает строку.
После
select @str='select '''+replace(@str, ',', ''' as val union all select ''')+''''

Нужно написать
print @str

Выполнить, и многие воросы отпадут сами собой.
6 июл 15, 09:56    [17855957]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг  [new]
2viper2viper
Member

Откуда:
Сообщений: 271
Спасибо Guf
за команду print отдельная благодарность)
6 июл 15, 10:04    [17855981]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
2viper2viper
Спасибо Guf
за команду print отдельная благодарность)
Однако, строку длиннее 8000 символов так не посмотришь!
6 июл 15, 10:11    [17856006]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить