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

Откуда: Армения, Ереван
Сообщений: 101
Yuri Abele,
Patindex у меня возвращает 0.


как Вы указали Patindex не годится в случае 'abc', 'abcd', 'abcde'

а у меня именно этот случай - p1,p12,p124,p15... и т.д. хотя все они разные.
11 сен 15, 11:43    [18136875]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в строковой переменной  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
AVRob
как Вы указали Patindex не годится в случае 'abc', 'abcd', 'abcde'
Почему?
11 сен 15, 11:45    [18136891]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в строковой переменной  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
AVRob
p1,p12,p124,p15


загрузите в табличную переменную сначала, потом обычный INNER JOIN

ЗЫ
ф-ю split поищите по форуму
11 сен 15, 11:46    [18136899]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в строковой переменной  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1661
AVRob
Yuri Abele,
Patindex у меня возвращает 0.


как Вы указали Patindex не годится в случае 'abc', 'abcd', 'abcde'

а у меня именно этот случай - p1,p12,p124,p15... и т.д. хотя все они разные.

Вы сделали так, как в моем последнем постинге?

ORDER BY PATINDEX(N',' + col1 + N',', N',' + @OrderBy + N',')


Где @OrderBy NVARCHAR(MAX)
11 сен 15, 11:47    [18136911]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в строковой переменной  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1661
Yuri Abele
Где @OrderBy NVARCHAR(MAX)


Что у вас выдает функция LEN(@OrderBy) после того, как Вы в эту переменную ваш тест засунули?
11 сен 15, 11:49    [18136937]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в строковой переменной  [new]
AVRob
Member

Откуда: Армения, Ереван
Сообщений: 101
Yuri Abele
AVRob
Glory,
А как из строки сделать таблицу с номерами?

Например так:
DECLARE @array NVARCHAR(MAX) = 'd14,45d,f458,abc,p25';
DECLARE @xml_text NVARCHAR(MAX) = N'<I>' + REPLACE(@array, ',', N'</I><I>') + N'</I>';
DECLARE @xml XML = CAST(@xml_text AS XML);

SELECT
	item_value = item.value('.', 'NVARCHAR(MAX)'),
	item_index = ROW_NUMBER() OVER(ORDER BY (SELECT 1 AS A))
FROM
	@xml.nodes('/I') XMLDATA(item);



у меня нет необходимости отбрасывать пустые элементы и просчитывать RANKing повторяющихся элементов.

А как связать этот скрипт с моей таблицей Table1 для сортировки?
11 сен 15, 11:50    [18136953]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в строковой переменной  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1661
AVRob,

DECLARE @array NVARCHAR(MAX) = 'd14,45d,f458,abc,p25';
DECLARE @xml_text NVARCHAR(MAX) = N'<I>' + REPLACE(@array, ',', N'</I><I>') + N'</I>';
DECLARE @xml XML = CAST(@xml_text AS XML);

SELECT *
FROM
	Table1 T1
	INNER JOIN (
		SELECT
			item_value = item.value('.', 'NVARCHAR(MAX)'),
			item_index = ROW_NUMBER() OVER(ORDER BY (SELECT 1 AS A))
		FROM
			@xml.nodes('/I') XMLDATA(item)
	) T2 ON T1.Col1 = T2.item_value
ORDER BY
	T2.item_index


Но Вам не надо так сложно - PATINDEX должен работать!
Ответьте на мой вопрос про LEN(@OrderBy)
11 сен 15, 11:54    [18136973]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в строковой переменной  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1661
Точнее

DECLARE @array NVARCHAR(MAX) = 'd14,45d,f458,abc,p25';
DECLARE @xml_text NVARCHAR(MAX) = N'<I>' + REPLACE(@array, ',', N'</I><I>') + N'</I>';
DECLARE @xml XML = CAST(@xml_text AS XML);

SELECT
	T1.*
FROM
	Table1 T1
	INNER JOIN (
		SELECT
			item_value = item.value('.', 'NVARCHAR(MAX)'),
			item_index = ROW_NUMBER() OVER(ORDER BY (SELECT 1 AS A))
		FROM
			@xml.nodes('/I') XMLDATA(item)
	) T2 ON T1.Col1 = T2.item_value
ORDER BY
	T2.item_index
11 сен 15, 11:55    [18136985]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в строковой переменной  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1661
Еще точнее :-)

DECLARE @array NVARCHAR(MAX) = 'd14,45d,f458,abc,p25';
DECLARE @xml_text NVARCHAR(MAX) = N'<I>' + REPLACE(@array, ',', N'</I><I>') + N'</I>';
DECLARE @xml XML = CAST(@xml_text AS XML);

SELECT
	T1.*
FROM
	Table1 T1
	INNER JOIN (
		SELECT
			item_value = item.value('.', 'NVARCHAR(MAX)'),
			item_index = ROW_NUMBER() OVER(ORDER BY (SELECT 1 AS A))
		FROM
			@xml.nodes('/I') XMLDATA(item)
	) T2 ON T1.Col1 = T2.item_value
ORDER BY
	T2.item_index


Так что всё-таки с LEN(@OrderBy)?
11 сен 15, 11:56    [18136994]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в строковой переменной  [new]
AVRob
Member

Откуда: Армения, Ереван
Сообщений: 101
Yuri Abele,

Patindex у меня возвращает только 0, тогда как заменив patindex на Charindex все работает нормально (пока длина не превышает 4000)
11 сен 15, 11:59    [18137010]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в строковой переменной  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1661
AVRob
Yuri Abele,

Patindex у меня возвращает только 0, тогда как заменив patindex на Charindex все работает нормально (пока длина не превышает 4000)

Что, всегда "возвращает только 0"?!?!
Вы где-то ошиблись, однозначно! Процитируйте сюда Ваш SQL
11 сен 15, 12:00    [18137021]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в строковой переменной  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1661
Yuri Abele
AVRob
Yuri Abele,

Patindex у меня возвращает только 0, тогда как заменив patindex на Charindex все работает нормально (пока длина не превышает 4000)

Что, всегда "возвращает только 0"?!?!
Вы где-то ошиблись, однозначно! Процитируйте сюда Ваш SQL

У CHARINDEX и PATINDEX параметры местами поменяны
11 сен 15, 12:01    [18137027]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в строковой переменной  [new]
AVRob
Member

Откуда: Армения, Ереван
Сообщений: 101
Yuri Abele,

Спасибо большое - получилось!!
11 сен 15, 12:05    [18137057]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в строковой переменной  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1661
AVRob
Yuri Abele,

Спасибо большое - получилось!!

Надеюсь, что через PATINDEX - через него должно получиться!
11 сен 15, 12:10    [18137100]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в строковой переменной  [new]
AVRob
Member

Откуда: Армения, Ереван
Сообщений: 101
Yuri Abele
пропущено...

Вы где-то ошиблись, однозначно! Процитируйте сюда Ваш SQL



select patindex(',p17760,',N',p265,p17760,p271,p285,p17678,p417,p16966,p439,p17000,p17000,p555,p17804,p17690') as cindex

у меня возвращает 0, тогда как

select charindex(',p17760,',N',p265,p17760,p271,p285,p17678,p417,p16966,p439,p17000,p17000,p555,p17804,p17690') as cindex

djpdhfoftn 6
11 сен 15, 12:12    [18137113]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в строковой переменной  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1661
Не, это я ошибся, так работает:

select patindex('%,p17760,%', N',p265,p17760,p271,p285,p17678,p417,p16966,p439,p17000,p17000,p555,p17804,p17690') as cindex
11 сен 15, 12:14    [18137134]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в строковой переменной  [new]
AVRob
Member

Откуда: Армения, Ереван
Сообщений: 101
Получилось с помощью

Yuri Abele
Еще точнее :-)

DECLARE @array NVARCHAR(MAX) = 'd14,45d,f458,abc,p25';
DECLARE @xml_text NVARCHAR(MAX) = N'<I>' + REPLACE(@array, ',', N'</I><I>') + N'</I>';
DECLARE @xml XML = CAST(@xml_text AS XML);

SELECT
	T1.*
FROM
	Table1 T1
	INNER JOIN (
		SELECT
			item_value = item.value('.', 'NVARCHAR(MAX)'),
			item_index = ROW_NUMBER() OVER(ORDER BY (SELECT 1 AS A))
		FROM
			@xml.nodes('/I') XMLDATA(item)
	) T2 ON T1.Col1 = T2.item_value
ORDER BY
	T2.item_index


11 сен 15, 12:15    [18137142]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в строковой переменной  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1661
Yuri Abele
Не, это я ошибся, так работает:

select patindex('%,p17760,%', N',p265,p17760,p271,p285,p17678,p417,p16966,p439,p17000,p17000,p555,p17804,p17690') as cindex

Т.е.
ORDER BY PATINDEX(N'%,' + col1 + N',%', N',' + @OrderBy + N',')
11 сен 15, 12:16    [18137161]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в строковой переменной  [new]
AVRob
Member

Откуда: Армения, Ереван
Сообщений: 101
select patindex('%,p17760,%', N',p265,p17760,p271,p285,p17678,p417,p16966,p439,p17000,p17000,p555,p17804,p17690') as cindex

так работает, если даже длина строковой переменной больше 4000.

Однако, когда используем

select patindex('%,'+col1+',%', N',p265,p17760,p271,p285,p17678,p417,p16966,p439,p17000,p17000,p555,p17804,p17690') as cindex

работает точно как charindex.

Если длина строковой переменной больше 4000 то имеем 0 для данных за 4000-ым символом.
11 сен 15, 12:27    [18137251]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в строковой переменной  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Yuri Abele
Yuri Abele
Не, это я ошибся, так работает:

select patindex('%,p17760,%', N',p265,p17760,p271,p285,p17678,p417,p16966,p439,p17000,p17000,p555,p17804,p17690') as cindex

Т.е.
ORDER BY PATINDEX(N'%,' + col1 + N',%', N',' + @OrderBy + N',')
CHARINDEX короче (проценты только убрать)
11 сен 15, 12:28    [18137260]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в строковой переменной  [new]
AVRob
Member

Откуда: Армения, Ереван
Сообщений: 101
select col1,patindex('%,'+col1+',%', N',p265,p17760,p271,p285,p17678,p417,p16966,p439,p17000,p17000,p555,p17804,p17690') as cindex from table1
11 сен 15, 12:28    [18137261]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в строковой переменной  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
AVRob
select patindex('%,p17760,%', N',p265,p17760,p271,p285,p17678,p417,p16966,p439,p17000,p17000,p555,p17804,p17690') as cindex

так работает, если даже длина строковой переменной больше 4000.

Однако, когда используем

select patindex('%,'+col1+',%', N',p265,p17760,p271,p285,p17678,p417,p16966,p439,p17000,p17000,p555,p17804,p17690') as cindex

работает точно как charindex.

Если длина строковой переменной больше 4000 то имеем 0 для данных за 4000-ым символом.
Ограничения на длину касаются первого аргумента CHARINDEX и PATINDEX!
О какой переменной речь?
11 сен 15, 12:31    [18137278]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в строковой переменной  [new]
Glory
Member

Откуда:
Сообщений: 104751
AVRob
Однако, когда используем

select patindex('%,'+col1+',%', N',p265,p17760,p271,p285,p17678,p417,p16966,p439,p17000,p17000,p555,p17804,p17690') as cindex

работает точно как charindex.

Если длина строковой переменной больше 4000 то имеем 0 для данных за 4000-ым символом.

Тип данных у col1 небось char
11 сен 15, 12:32    [18137290]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в строковой переменной  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1661
iap
Yuri Abele
пропущено...

Т.е.
ORDER BY PATINDEX(N'%,' + col1 + N',%', N',' + @OrderBy + N',')

CHARINDEX короче (проценты только убрать)

У овтора топика длина @OrderBy может превышать 4000 символов.

@AVRob:
Вы ответите-таки или нет?
1. Какого типа у вас @OrderBy?
2. Что возвращает LEN(@OrderBy) после присвоение значения?
11 сен 15, 12:38    [18137331]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в строковой переменной  [new]
AVRob
Member

Откуда: Армения, Ереван
Сообщений: 101
iap
Ограничения на длину касаются первого аргумента CHARINDEX и PATINDEX!
О какой переменной речь?


CHARINDEX ( expressionToFind ,expressionToSearch [ , start_location ] )

речь идет о expressionToSearch. когда ее длина больше 4000 то в запросе

select patindex('%,'+col1+',%', expressionToSearch+N','+col1+N',') as cindex FROM table1

обе функции возвращают 0, длина expressionToSearch больше 4000 (когда expressionToSearch не содержит col1).
11 сен 15, 12:40    [18137347]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить