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

Откуда:
Сообщений: 2043
Здравствуйте!

Есть SQL-запрос. Запрос рабочий. Но есть но. Обнаружились адреса доставки, которые имеют перенос строки. В результате нормально выгружаются. Но когда копируешь в эксель, сохраняешь в текстовом формате и потом импортируешь в эксель, а также сохраняешь в формате csv, то строки задваиваются.
+SQL-запрос
SELECT	
	CAST(F1."[Города].[Город].[Город].[MEMBER_CAPTION]" AS NVARCHAR(50)) AS [Город],
	CAST(F1."[Торговые точки].[Клиент].[Клиент].[MEMBER_CAPTION]" AS NVARCHAR(150)) AS [Клиент],
	CAST(F1."[Торговые точки].[Код ТТ].[Код ТТ].[MEMBER_CAPTION]" AS NVARCHAR(50))AS [Код ТТ],
	CAST(F1."[Торговые точки].[Адрес ТТ].[Адрес ТТ].[MEMBER_CAPTION]"AS NVARCHAR(150)) AS [Адрес ТТ],
	F1."[Measures].[Отгрузки шт]" AS [Отгрузки шт]
FROM OPENROWSET(
	'MSOLAP',
	'Provider=MSOLAP.3;...',
	'SELECT
		{[Measures].[Отгрузки шт]} ON 0,
		NON EMPTY
		[Города].[Город].[Город]*
		[Торговые точки].[Клиент].[Клиент]*
		[Торговые точки].[Код ТТ].[Код ТТ]*
		[Торговые точки].[Адрес ТТ].[Адрес ТТ]
		ON 1
	FROM
		(SELECT 
			([Время].[Месяц].&[2018-06-01T00:00:00],
			[Торговые точки].[Код ТТ].&[00001грд1]							
			) ON 0 FROM PROFIT)'
			) AS F1
Скажите, как избежать задваивании строк? Как убрать перенос строк в SQL?

К сообщению приложен файл. Размер - 11Kb
22 июн 18, 09:38    [21511827]     Ответить | Цитировать Сообщить модератору
 Re: Задваиваются строки из за переноса строк  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
оффтоп :)

автор
о когда копируешь в эксель, сохраняешь в текстовом формате и потом импортируешь в эксель, а также сохраняешь в формате csv, то строки задваиваются.


+
- Доктор, когда я вот вот так вот делаю у меня болит..

- А вы вот вот так вот не делайте
22 июн 18, 09:40    [21511835]     Ответить | Цитировать Сообщить модератору
 Re: Задваиваются строки из за переноса строк  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
ferzmikk,

replace(Stroka,char(13)+char(10),'')
22 июн 18, 09:41    [21511842]     Ответить | Цитировать Сообщить модератору
 Re: Задваиваются строки из за переноса строк  [new]
ferzmikk
Member

Откуда:
Сообщений: 2043
TaPaK,

Результат надо в excel вывести
22 июн 18, 09:41    [21511847]     Ответить | Цитировать Сообщить модератору
 Re: Задваиваются строки из за переноса строк  [new]
ferzmikk
Member

Откуда:
Сообщений: 2043
Kopelly,

Спасибо, получилось!
22 июн 18, 09:45    [21511859]     Ответить | Цитировать Сообщить модератору
 Re: Задваиваются строки из за переноса строк  [new]
ferzmikk
Member

Откуда:
Сообщений: 2043
А если надо наоборот выгрузить такие строки, то надо писать так получается вот:
WHERE [Адрес ТТ] like '%' + char(13)+char(10) + '%'
22 июн 18, 09:55    [21511892]     Ответить | Цитировать Сообщить модератору
 Re: Задваиваются строки из за переноса строк  [new]
ferzmikk
Member

Откуда:
Сообщений: 2043
Kopelly
ferzmikk,

replace(Stroka,char(13)+char(10),'')
Такая запись ловит, если есть один перенос, но не ловит если больше одного переноса. По идее же replace должен учитывать любое количество переносов строк.

Как правильно написать?
22 июн 18, 10:05    [21511935]     Ответить | Цитировать Сообщить модератору
 Re: Задваиваются строки из за переноса строк  [new]
Посетитель
Member

Откуда:
Сообщений: 1209
ferzmikk,

переонсы, они разные бывают.
лучше сделать так
replace(replace(Stroka,char(13),''),char(10),'')
22 июн 18, 10:09    [21511954]     Ответить | Цитировать Сообщить модератору
 Re: Задваиваются строки из за переноса строк  [new]
ferzmikk
Member

Откуда:
Сообщений: 2043
Посетитель
переонсы, они разные бывают.
лучше сделать так
replace(replace(Stroka,char(13),''),char(10),'')
ferzmikk
А если надо наоборот выгрузить такие строки, то надо писать так получается вот:
WHERE [Адрес ТТ] like '%' + char(13)+char(10) + '%'
То тут в условии как для любого количества переносов писать?

И еще как получить количество переносов строк?
22 июн 18, 10:27    [21512027]     Ответить | Цитировать Сообщить модератору
 Re: Задваиваются строки из за переноса строк  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
ferzmikk,
автор
И еще как получить количество переносов строк?

ну что-то вроде

LEN(Stroka) - replace(replace(Stroka,char(13),''),char(10),'') 
22 июн 18, 10:29    [21512034]     Ответить | Цитировать Сообщить модератору
 Re: Задваиваются строки из за переноса строк  [new]
Посетитель
Member

Откуда:
Сообщений: 1209
ferzmikk,

WHERE [Адрес ТТ] like '%' + char(13) + '%'
   or [Адрес ТТ] like '%' + char(10) + '%'


а может даже хватить одного

[Адрес ТТ] like '%' + char(10) + '%'


бо, без CR переносы - обычное явление, а вот без LF - не встречал.

ну и подсчитать, во избежание удвоения, лучше с небольшой поправкой

LEN(Stroka) - len(replace(Stroka,char(10),'')) 
22 июн 18, 10:38    [21512082]     Ответить | Цитировать Сообщить модератору
 Re: Задваиваются строки из за переноса строк  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Может быть ОДИН перенос такой: LF+CR. А может быть такой: CR+LF. А может быть такой: одиночный CR или такой: одиночный LF.
Кстати, теоретически разные принтеры обрабатывают все эти случаи по-разному.
Так что количество всех вышеперечисленных комбинаций CR и LF можно посчитать так:
SELECT (LEN(REPLACE([Адрес ТТ],' ',''))+LEN(REPLACE(REPLACE(REPLACE([Адрес ТТ],' ',''),CHAR(10)+CHAR(13),''),CHAR(13)+CHAR(10),'')))/2-LEN(REPLACE(REPLACE(REPLACE([Адрес ТТ],' ',''),CHAR(10),''),CHAR(13),''))
Идея простая: сначала подсчитываем пары CR+LF и LF+CR,
а потом прибавляем количество отдельно стоящих CR и LF после удаления из строки уже посчитанных пар.
Причём всё это после предварительного удаления всех пробелов, чтобы не нарваться на особенности работы LEN с хвостовыми пробелами.
22 июн 18, 11:27    [21512379]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить