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

Откуда:
Сообщений: 76
вроде по сортировке строки понятно.
Спец символы и цифры находятся выше алфавита.
Но что не так с " ' " ? почему он "игнорируется" и значащим становится второй символ?

И вопрос 2, как заставить sql пересмотреть позицию и отнести " ' " к другим спец символам.

;WITH	info AS
(
	SELECT	CAST(N'\' AS NVARCHAR(25)) AS NAME
	UNION ALL
	SELECT	N'A'
	UNION ALL
	SELECT	N'`B'
	UNION ALL
	SELECT	N'''B'
	UNION ALL
	SELECT	N'"B'
	UNION ALL
	SELECT	N'С'
	UNION ALL
	SELECT	N'5'
)

SELECT	*
FROM	info
ORDER BY NAME;
29 окт 19, 15:50    [22005252]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка строки, начинающейся с спецсимволов и знаков  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36694
Потому что такой collation.
29 окт 19, 15:51    [22005255]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка строки, начинающейся с спецсимволов и знаков  [new]
Dzianis
Member

Откуда:
Сообщений: 76
Гавриленко Сергей Алексеевич
Потому что такой collation.


перепробовал десяток collation из Latin все реагируют идентично. Искать среди неLatin так боюсь, что выползут еще приколы.
29 окт 19, 16:00    [22005279]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка строки, начинающейся с спецсимволов и знаков  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Dzianis, а "С" у вас намеренно русская?

Хотите, чтобы строки всегда были последними - так явно и напишите:


SELECT *
FROM info
ORDER BY CASE WHEN NAME LIKE '[0-9a-zA-Zа-яА-Я]%' THEN 1 ELSE 0 END, NAME;
29 окт 19, 16:13    [22005310]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка строки, начинающейся с спецсимволов и знаков  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30768
Dzianis
Но что не так с " ' " ? почему он "игнорируется" и значащим становится второй символ?

Dzianis
перепробовал десяток collation из Latin все реагируют идентично.
В BIN коллейшенах одинарная кавычка не игнорируется, она будет вначале. Но символ апострофа, и слэш будут в конце. Такой у них порядковый номер.

А в не-BIN коллейшенах одинарная кавычка да, игнорируется.
Мне это тоже странно, но вот так решили стандартизаторы.

Т.е. вот это утверждение:
Dzianis
Спец символы и цифры находятся выше алфавита.
неверно, откуда вы это взяли? Они не "в конце".
29 окт 19, 18:52    [22005507]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка строки, начинающейся с спецсимволов и знаков  [new]
Dzianis
Member

Откуда:
Сообщений: 76
alexeyvg
Т.е. вот это утверждение:
Dzianis
Спец символы и цифры находятся выше алфавита.
неверно, откуда вы это взяли? Они не "в конце".


Это субъективная фраза была.
30 окт 19, 09:58    [22005716]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка строки, начинающейся с спецсимволов и знаков  [new]
Dzianis
Member

Откуда:
Сообщений: 76
Minamoto
Dzianis, а "С" у вас намеренно русская?

Хотите, чтобы строки всегда были последними - так явно и напишите:


SELECT *
FROM info
ORDER BY CASE WHEN NAME LIKE '[0-9a-zA-Zа-яА-Я]%' THEN 1 ELSE 0 END, NAME;


Спс. Вариант такой подойдет.
30 окт 19, 10:12    [22005729]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка строки, начинающейся с спецсимволов и знаков  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30768
Dzianis
Это субъективная фраза была.
А, это "желание"?
Понятно.

Minamoto
Хотите, чтобы строки всегда были последними - так явно и напишите:
SELECT *
FROM info
ORDER BY CASE WHEN NAME LIKE '[0-9a-zA-Zа-яА-Я]%' THEN 1 ELSE 0 END, NAME;
Не, не получится :-(

Автору, очевидно, нужна сортировка не только по первому символу, но и по остальным.
А в этом запросе учитывается только первый символ, а если кавычка будет вторым, то сортировка уровнем ниже получится "неправильной".

Можно, конечно, добавить ещё парочку CASE, что бы сортировалось хотя бы по первым 3м символам.
;WITH	info AS
(
	SELECT	CAST(N'\' AS NVARCHAR(25)) AS NAME
	UNION ALL
	SELECT	N'AA'
	UNION ALL
	SELECT	N'A`B'
	UNION ALL
	SELECT	N'A''B'
	UNION ALL
	SELECT	N'A"B'
	UNION ALL
	SELECT	N'AC'
	UNION ALL
	SELECT	N'A''C'
	UNION ALL
	SELECT	N'AD'
	UNION ALL
	SELECT	N'A''D'
	UNION ALL
	SELECT	N'A5'
	UNION ALL
	SELECT	N'ABC'
	UNION ALL
	SELECT	N'AB''C'
	UNION ALL
	SELECT	N'ABD'
	UNION ALL
	SELECT	N'AB''D'
)

SELECT	
	CASE WHEN NAME LIKE '[0-9a-zA-Zа-яА-Я]%' THEN 1 ELSE 0 END,
	CASE WHEN NAME LIKE '[^][0-9a-zA-Zа-яА-Я]%' THEN 1 ELSE 0 END,
	CASE WHEN NAME LIKE '[^][^][0-9a-zA-Zа-яА-Я]%' THEN 1 ELSE 0 END,
	*
FROM	info
ORDER BY 
	CASE WHEN NAME LIKE '[0-9a-zA-Zа-яА-Я]%' THEN 1 ELSE 0 END,
	CASE WHEN NAME LIKE '[^][0-9a-zA-Zа-яА-Я]%' THEN 1 ELSE 0 END,
	CASE WHEN NAME LIKE '[^][^][0-9a-zA-Zа-яА-Я]%' THEN 1 ELSE 0 END,
	NAME 
30 окт 19, 10:31    [22005752]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка строки, начинающейся с спецсимволов и знаков  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
alexeyvg,

почему в сортировке просто не заменить кавычку
30 окт 19, 10:33    [22005758]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка строки, начинающейся с спецсимволов и знаков  [new]
alexeyvg
Member

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

почему в сортировке просто не заменить кавычку
Потому что спецсимволов много, не только лишь одна кавычка.
30 окт 19, 10:46    [22005765]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка строки, начинающейся с спецсимволов и знаков  [new]
alexeyvg
Member

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

почему в сортировке просто не заменить кавычку
Потому что спецсимволов много, не только лишь одна кавычка.
Хотя, если действительно игнорируется, то это самое простое, ORDER BY REPLACE...
30 окт 19, 10:47    [22005766]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка строки, начинающейся с спецсимволов и знаков  [new]
Dzianis
Member

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

почему в сортировке просто не заменить кавычку
Потому что спецсимволов много, не только лишь одна кавычка.


Но только кавычка (апостроф) является частью языка и учитывается в сортировке по "другому" чем спец символы.

к сожалению это легкий костыль edition для ситуации, когда программисты на UI сортируют результат запроса в памяти на Java по своим правилам. И приходится для background процесса реализовывать "высокую степень похожести" сейчас.
Чтобы дать программистам время прикрутить аналогичную как в UI сортировку в background процессе. order by case .. вполне достаточно.

Спасибо.
30 окт 19, 19:12    [22006471]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка строки, начинающейся с спецсимволов и знаков  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30768
Dzianis
alexeyvg
Потому что спецсимволов много, не только лишь одна кавычка.
Но только кавычка (апостроф) является частью языка и учитывается в сортировке по "другому" чем спец символы.
Понятно. Да, эти тонкости я не знаю...
30 окт 19, 19:49    [22006501]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить