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

Откуда: Минск
Сообщений: 1838
  SELECT
    ASCII(LEFT(LTRIM(UPPER(cc.[Name])), 1)) id_item,
    LEFT(LTRIM(UPPER(cc.[Name])), 1) name_item
  FROM
    cosign_Cosignatory cc
  GROUP BY
    LEFT(LTRIM(UPPER(cc.[Name])), 1)  
  ORDER BY
    LEFT(LTRIM(UPPER(cc.[Name])), 1)


  SELECT
    ASCII(LEFT(LTRIM(UPPER(cc.[Name])), 1)) id_item,
    LEFT(LTRIM(UPPER(cc.[Name])), 1) name_item
  FROM
    cosign_Cosignatory cc
  GROUP BY
    LEFT(LTRIM(UPPER(cc.[Name])), 1)  
  ORDER BY
    ASCII(LEFT(LTRIM(UPPER(cc.[Name])), 1))


Результат сортировки разный.
В 1 случае:
73 I
75 K
185 №
83 S
85 U

Во 2 случае
73 I
75 K
83 S
85 U
185 №
192 А
193 Б
19 апр 13, 18:15    [14206064]     Ответить | Цитировать Сообщить модератору
 Re: Особенности сортировки?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
collation
?
19 апр 13, 18:17    [14206071]     Ответить | Цитировать Сообщить модератору
 Re: Особенности сортировки?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
X-Cite,

тип, сестра! Тип - ?
19 апр 13, 18:23    [14206096]     Ответить | Цитировать Сообщить модератору
 Re: Особенности сортировки?  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1838
Cyrillic_General_CI_AS
19 апр 13, 18:28    [14206129]     Ответить | Цитировать Сообщить модератору
 Re: Особенности сортировки?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
with c as (select 'I' as c union all select 'K' union all select '№' union all select 'S' union all select 'U')
select ascii(c.c), c.c
from c c
order by c.c collate Cyrillic_General_CI_AS;

with c as (select 'I' as c union all select 'K' union all select '№' union all select 'S' union all select 'U')
select ascii(c.c), c.c
from c c
order by c.c collate Cyrillic_General_BIN;

with c as (select 'I' as c union all select 'K' union all select '№' union all select 'S' union all select 'U')
select ascii(c.c), c.c
from c c
order by c.c collate Latin1_General_CI_AS;


Три разных порядка сортировки:
code        c
----------- ----
73          I
75          K
185         №
83          S
85          U

(5 row(s) affected)

code        c
----------- ----
73          I
75          K
83          S
85          U
185         №

(5 row(s) affected)

code        c
----------- ----
185         №
73          I
75          K
83          S
85          U

(5 row(s) affected)

А вопрос-то в чём?
19 апр 13, 18:39    [14206174]     Ответить | Цитировать Сообщить модератору
 Re: Особенности сортировки?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
X-Cite
Результат сортировки разный.
А что странного?
То что он разный, это вообще естественно, вы бы ещё отсортировали по хэшу строки и удивлялись :-)

А то, что № между K и S - ну это такая сортировка, так задано. Видимо, есть какие то правила в стандартах и всяких филологических науках...

select * from (
select N'I' as N union all
select N'K' union all
select N'S' union all
select N'U' union all
select N'№' union all
select N'А' union all
select N'Б'
) t
order by N collate Cyrillic_General_BIN

select * from (
select N'I' as N union all
select N'K' union all
select N'S' union all
select N'U' union all
select N'№' union all
select N'А' union all
select N'Б'
) t
order by N collate Cyrillic_General_CI_AS
19 апр 13, 18:40    [14206178]     Ответить | Цитировать Сообщить модератору
 Re: Особенности сортировки?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
хм, винда так же сортирует :)

К сообщению приложен файл. Размер - 3Kb
19 апр 13, 18:41    [14206182]     Ответить | Цитировать Сообщить модератору
 Re: Особенности сортировки?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Гость333
А вопрос-то в чём?

А, вижу в заголовке темы:
автор
Особенности сортировки?

Да, это особенности используемого collation'а (параметра сортировки).
19 апр 13, 18:42    [14206186]     Ответить | Цитировать Сообщить модератору
 Re: Особенности сортировки?  [new]
BlackRaider
Member

Откуда: Москва (Волгоград)
Сообщений: 63
просто № это N с херней :)
19 апр 13, 18:42    [14206189]     Ответить | Цитировать Сообщить модератору
 Re: Особенности сортировки?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
X-Cite
Cyrillic_General_CI_AS
Это тип поля, по-Вашему?
19 апр 13, 19:13    [14206309]     Ответить | Цитировать Сообщить модератору
 Re: Особенности сортировки?  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1838
поле NVARCHAR(150)

по мне сортировка по строкам должна идти в соответствии с кодами ASCII
20 апр 13, 01:23    [14206990]     Ответить | Цитировать Сообщить модератору
 Re: Особенности сортировки?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
X-Cite
кодами ASCII
А что это такое.
Не надо вспоминать ошибки прошлого.

BlackRaider правду говорит. Почитайте про это (и ссылки оттуда).
20 апр 13, 01:57    [14207025]     Ответить | Цитировать Сообщить модератору
 Re: Особенности сортировки?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
X-Cite
поле NVARCHAR(150)
по мне сортировка по строкам должна идти в соответствии с кодами ASCII
А ещё не надо путать NVarChar и VarChar.
20 апр 13, 02:00    [14207026]     Ответить | Цитировать Сообщить модератору
 Re: Особенности сортировки?  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
X-Cite
поле NVARCHAR(150)

по мне сортировка по строкам должна идти в соответствии с кодами ASCII
Невозможно в принципе.

ASCII-код для одного и того же символа всегда один, в любом коллейшне. Однако порядок сортировки каждый раз меняется - собственно, коллейшн именно его и определяет, больше он ничего не делает.

Можно попробовать конвертировать строки в varbinary и сортировать по получившемуся столбцу. Не уверен, правда, что там еще чего-нибудь не вылезет.
20 апр 13, 08:05    [14207109]     Ответить | Цитировать Сообщить модератору
 Re: Особенности сортировки?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
X-Cite
поле NVARCHAR(150)

по мне сортировка по строкам должна идти в соответствии с кодами ASCII
А при чём здесь тогда ASCII?
Уместнее UNICODE().
И перед литеральными строками букву N ставить не забываем
20 апр 13, 12:27    [14207314]     Ответить | Цитировать Сообщить модератору
 Re: Особенности сортировки?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
alexeyvg
select * from (
select N'I' as N union all
select N'K' union all
select N'S' union all
select N'U' union all
select N'№' union all
select N'А' union all
select N'Б'
) t
order by N collate Cyrillic_General_BIN
И давно уже здесь, на форуме, выяснили, что для юникода Cyrillic_General_BIN работает неверно.
Надо применять Cyrillic_General_BIN2
20 апр 13, 12:32    [14207333]     Ответить | Цитировать Сообщить модератору
 Re: Особенности сортировки?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
X-Cite
по мне сортировка по строкам должна идти в соответствии с кодами ASCII
Неправильно, она идёт в соответствии с правилами сортировки для языка (т.е. это определяется филологами, а не программистами).
iap
И давно уже здесь, на форуме, выяснили, что для юникода Cyrillic_General_BIN работает неверно.
Надо применять Cyrillic_General_BIN2
Честно говоря, даже не могу представить, что в данном контексте означает "неправильно". У Cyrillic_General_BIN одни правила сортировки, у Cyrillic_General_BIN2 другие, обе работают правильно.

Я просто проиллюстрировал, что сортировка разная.
20 апр 13, 15:53    [14207820]     Ответить | Цитировать Сообщить модератору
 Re: Особенности сортировки?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
alexeyvg
Честно говоря, даже не могу представить, что в данном контексте означает "неправильно". У Cyrillic_General_BIN одни правила сортировки, у Cyrillic_General_BIN2 другие, обе работают правильно.
Вот это уже не актульно?
3286492

Я, возможно, не в курсе, а всё уже исправили?
20 апр 13, 16:38    [14207927]     Ответить | Цитировать Сообщить модератору
 Re: Особенности сортировки?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
iap
alexeyvg
Честно говоря, даже не могу представить, что в данном контексте означает "неправильно". У Cyrillic_General_BIN одни правила сортировки, у Cyrillic_General_BIN2 другие, обе работают правильно.
Вот это уже не актульно?
3286492
Я, возможно, не в курсе, а всё уже исправили?
Что исправили? Микрософт пишет, что это не ошибка, и исправлять не собирается.

Ошибка - это когда работает не так, как описано, а тут вроде всё нормально.

По мне так BIN сортирует более правильно, просто как двоичные данные, как и следует из названия. Если нужно сортировать не как двоичные данные, а как то по другому, для этого есть другие коллейшены.
20 апр 13, 20:04    [14208317]     Ответить | Цитировать Сообщить модератору
 Re: Особенности сортировки?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
alexeyvg
Неправильно, она идёт в соответствии с правилами сортировки для языка (т.е. это определяется филологами, а не программистами).
Тоже неточно. Сортировок может быть 100500, кому как нраица.
Можно определить свою сортировку, к примеру по степени угловатости/округлости символа, или по первому историческому появлению в письменах.

И мне кажется филологи тут не причём, какая им разница что какой-то символ где-то там идёт раньше чем другой.
Символы это множество, а не упорядоченный массив. Вы ещё китайские иероглифы отсортируйте, ага: "А ну-ка дети, нарисуйте 1980 символ алфавита".

А проблема скорее в степени загаженности самих данных в базе. Это какого в одну кучу всё валится?
Разбейте по категориям и почистите данные.
21 апр 13, 17:15    [14210031]     Ответить | Цитировать Сообщить модератору
 Re: Особенности сортировки?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
Mnior
Тоже неточно. Сортировок может быть 100500, кому как нраица.
Можно определить свою сортировку, к примеру по степени угловатости/округлости символа, или по первому историческому появлению в письменах.

И мне кажется филологи тут не причём, какая им разница что какой-то символ где-то там идёт раньше чем другой.
Символы это множество, а не упорядоченный массив. Вы ещё китайские иероглифы отсортируйте, ага: "А ну-ка дети, нарисуйте 1980 символ алфавита".
Я понимаю, что можно сортировать как угодно, но кто это определяет, не программисты же?
Филологи и определяют; наверное есть и для китайских иероглифов порядок - при издании всяких списков, справочников и словарей они там не каждый раз в произвольном порядке.

Или вы имели в виду, что китайские иероглифы в сиквеле не сортируются и order by будет строки каждый раз в разном порядке выводить?
21 апр 13, 17:37    [14210088]     Ответить | Цитировать Сообщить модератору
 Re: Особенности сортировки?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
alexeyvg
Я понимаю, что можно сортировать как угодно, но кто это определяет, не программисты же?
Откуда вы знаете что не они? ;)
alexeyvg
китайских иероглифов порядок
Порядок? Если каждая группа имеет порядок, это не значит что общее имеет порядок. Иероглифы в ISO добавляются постепено, притом для всей "большой пятёрки" восточных языков. Их бинарная сортировка не имеет никакого смысла. Есть несколько сортировок, к примеру по близкому звучанию английского алфавита.
Имеет ли оно смысл для китайца? Наверно это больше политический вопрос, чем филологический.
У них несколько стандартов самого написания иероглифов и при этом их калиграфия так и небыла реализована в софте до конца верно. А вообще там бардак ... во всём. :)

Это я вам пишу как полный профан в этом.
alexeyvg
они там не каждый раз в произвольном порядке.
Отрицание не есть дуальная противоположность.
alexeyvg
Или вы имели в виду, что китайские иероглифы в сиквеле не сортируются и order by будет строки каждый раз в разном порядке выводить?
Триллить капитана очевидность милое дело?!
Если брать разные версии скуля (с разной версией уникода), то да, в разном порядке.
Я рад что у вас хорошее настроение. :)

Общемировой порядок неизбежен. Его небыло, так что пришлось придумать.
22 апр 13, 03:30    [14211028]     Ответить | Цитировать Сообщить модератору
 Re: Особенности сортировки?  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1838
Почитал это
DECLARE @T TABLE (a NCHAR)

INSERT INTO @T (a)
VALUES ('M'),
       ('N'),
       ('O'),
       ('#'),
       ('№'),
       ('m'),
       ('n'),
       ('o')
       
SELECT
  *,
  ASCII(t.a),
  UNICODE(t.a)
FROM
  @T t
ORDER BY
  t.a COLLATE Cyrillic_General_CS_AS
  
SELECT
  *,
  ASCII(t.a),
  UNICODE(t.a)
FROM
  @T t
ORDER BY
  t.a COLLATE Cyrillic_General_CI_AS

И все равно не понимаю, почему во 2 запросе в случае M m сначала идет M, а в случае N n идет сначала n.
CI - без учета регистра, но почему он решил именно n первым сделать и если нет разницы, почему тогда выполнив 50 раз запрос 50 раз n был первым, а не рандомно.

Хм.. а где бы найти для каждого коллейшна правила по которым он определяет порядок сортировки?
22 апр 13, 10:53    [14211570]     Ответить | Цитировать Сообщить модератору
 Re: Особенности сортировки?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
X-Cite
Хм.. а где бы найти для каждого коллейшна правила по которым он определяет порядок сортировки?
http://www.unicode.org/reports/tr10/
Но это офицаловка, в скуле может идти с опозданием и от версии зависит.

А вообще надо MSDN копать.
22 апр 13, 14:05    [14212772]     Ответить | Цитировать Сообщить модератору
 Re: Особенности сортировки?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
X-Cite
CI - без учета регистра, но почему он решил именно n первым сделать и если нет разницы, почему тогда выполнив 50 раз запрос 50 раз n был первым, а не рандомно

"Он решил именно n первым сделать" почти рандомно. То есть порядок символов в данном случае никто не гарантирует, но в текущей реализации по каким-то причинам именно n оказалось первым.
Сравните:
DECLARE @T TABLE (a NCHAR);

INSERT INTO @T (a)
VALUES ('N'), ('n');
       
SELECT t.a
FROM @T t
ORDER BY t.a COLLATE Cyrillic_General_CI_AS;

/* Результат:
   a
   ----
   N
   n
*/

DELETE @T;

INSERT INTO @T (a)
VALUES ('n'), ('N');
       
SELECT t.a
FROM @T t
ORDER BY t.a COLLATE Cyrillic_General_CI_AS;

/* Результат:
   a
   ----
   n
   N
*/

То есть, в каком порядке записи вставили в таблицу, в том же порядке они и вывелись.
22 апр 13, 14:30    [14212904]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить