Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сортировка строки, начинающейся с спецсимволов и знаков / 13 сообщений из 13, страница 1 из 1
29.10.2019, 15:50
    #39882771
Dzianis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка строки, начинающейся с спецсимволов и знаков
вроде по сортировке строки понятно.
Спец символы и цифры находятся выше алфавита.
Но что не так с " ' " ? почему он "игнорируется" и значащим становится второй символ?

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
;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;
...
Рейтинг: 0 / 0
29.10.2019, 15:51
    #39882773
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка строки, начинающейся с спецсимволов и знаков
Потому что такой collation.
...
Рейтинг: 0 / 0
29.10.2019, 16:00
    #39882781
Dzianis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка строки, начинающейся с спецсимволов и знаков
Гавриленко Сергей АлексеевичПотому что такой collation.

перепробовал десяток collation из Latin все реагируют идентично. Искать среди неLatin так боюсь, что выползут еще приколы.
...
Рейтинг: 0 / 0
29.10.2019, 16:13
    #39882787
Minamoto
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка строки, начинающейся с спецсимволов и знаков
Dzianis, а "С" у вас намеренно русская?

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


SELECT *
FROM info
ORDER BY CASE WHEN NAME LIKE '[0-9a-zA-Zа-яА-Я]%' THEN 1 ELSE 0 END, NAME;
...
Рейтинг: 0 / 0
29.10.2019, 18:52
    #39882886
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка строки, начинающейся с спецсимволов и знаков
DzianisНо что не так с " ' " ? почему он "игнорируется" и значащим становится второй символ?
Dzianisперепробовал десяток collation из Latin все реагируют идентично.В BIN коллейшенах одинарная кавычка не игнорируется, она будет вначале. Но символ апострофа, и слэш будут в конце. Такой у них порядковый номер.

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

Т.е. вот это утверждение:DzianisСпец символы и цифры находятся выше алфавита.неверно, откуда вы это взяли? Они не "в конце".
...
Рейтинг: 0 / 0
30.10.2019, 09:58
    #39882967
Dzianis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка строки, начинающейся с спецсимволов и знаков
alexeyvgТ.е. вот это утверждение:DzianisСпец символы и цифры находятся выше алфавита.неверно, откуда вы это взяли? Они не "в конце".

Это субъективная фраза была.
...
Рейтинг: 0 / 0
30.10.2019, 10:12
    #39882978
Dzianis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка строки, начинающейся с спецсимволов и знаков
MinamotoDzianis, а "С" у вас намеренно русская?

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


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

Спс. Вариант такой подойдет.
...
Рейтинг: 0 / 0
30.10.2019, 10:31
    #39882983
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка строки, начинающейся с спецсимволов и знаков
DzianisЭто субъективная фраза была.А, это "желание"?
Понятно.

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

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

Можно, конечно, добавить ещё парочку CASE, что бы сортировалось хотя бы по первым 3м символам.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
;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 
...
Рейтинг: 0 / 0
30.10.2019, 10:33
    #39882985
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка строки, начинающейся с спецсимволов и знаков
alexeyvg,

почему в сортировке просто не заменить кавычку
...
Рейтинг: 0 / 0
30.10.2019, 10:46
    #39882991
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка строки, начинающейся с спецсимволов и знаков
TaPaKalexeyvg,

почему в сортировке просто не заменить кавычкуПотому что спецсимволов много, не только лишь одна кавычка.
...
Рейтинг: 0 / 0
30.10.2019, 10:47
    #39882992
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка строки, начинающейся с спецсимволов и знаков
alexeyvgTaPaKalexeyvg,

почему в сортировке просто не заменить кавычкуПотому что спецсимволов много, не только лишь одна кавычка.Хотя, если действительно игнорируется, то это самое простое, ORDER BY REPLACE...
...
Рейтинг: 0 / 0
30.10.2019, 19:12
    #39883292
Dzianis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка строки, начинающейся с спецсимволов и знаков
alexeyvgTaPaKalexeyvg,

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

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

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

Спасибо.
...
Рейтинг: 0 / 0
30.10.2019, 19:49
    #39883309
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка строки, начинающейся с спецсимволов и знаков
DzianisalexeyvgПотому что спецсимволов много, не только лишь одна кавычка.Но только кавычка (апостроф) является частью языка и учитывается в сортировке по "другому" чем спец символы.Понятно. Да, эти тонкости я не знаю...
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сортировка строки, начинающейся с спецсимволов и знаков / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]