Хоча це запитання характерне для SQL Server, а цей відповідь - ні, я вважав, що мені все-таки слід розміщувати цю інформацію просто для того, щоб підвищити обізнаність про неї та не бути в опозиції до жодної з інших відповідей.
Незважаючи на те, що поза межами SQL Server, у певних середовищах можна проводити цей тип сортування. Це щось, що принаймні вказано в документації на Unicode. У МОВІ МАРКУПОВИХ МАРКУПОВИХ МАРКУПІВ (LDML) ЧАСТИНА 5: Стандарт / звіт про колекцію є діаграма Налаштування зібрання, яка описує різні варіанти налаштування поведінки сортування. Одним із варіантів є -kn-true
або [numericOrdering on]
:
Якщо встановлено , щоб на , будь-яка послідовність десяткових цифр (General_Category = Nd в [ UAX44 ]) сортується на початковому рівні з його числовим значенням. Наприклад, "A-21" <"A-123". Обчислені первинні ваги знаходяться на початку групи переназначення цифр . Таким чином, з нецільовою таблицею UCA "a $" <"a0" <"a2" <"a12" <"a⓪" <"aa".
Однак цей документ є "технічним стандартом" і не є частиною основної специфікації Unicode. У примітці вгорі документа зазначено:
Технічний стандарт Unicode (UTS) - це незалежна специфікація. Відповідність стандарту Unicode не передбачає відповідності жодному UTS.
Отже, така особливість поведінки недоступна в SQL Server або навіть у .NET (принаймні, не в оригінальній формі), навіть якщо вони відповідають основним специфікаціям Unicode.
Проект ICU (International Components for Unicode) - це набір бібліотек C / C ++ та Java, що реалізують цю функціональність, і навіть існує демонстрація цього інтернету. І під "пов'язаними проектами" є посилання на проект .NET, який, здається, є обгорткою об'єктів COM для бібліотеки ICU, який дозволив би цю функціональність піддавати керованому коду. Але незрозуміло, чи той проект .NET все ще активний.
Але щоб побачити таку поведінку в дії, перейдіть до демонстрації збору ICU .
Вставте наступне в область введення тексту зліва:
1
2
10B
6
11
10A
3
10
Встановіть усі параметри на "за замовчуванням". Позначте параметр "Номери рядків введення" праворуч від sortкнопки та переконайтесь, що параметр "розрізнити сили" не встановлено.
Натисніть sortкнопку, і вам слід отримати наступне:
[1] 1
[8] 10
[6] 10A
[3] 10B
[5] 11
[2] 2
[7] 3
[4] 6
Це те, чого слід очікувати під час типового сортування рядків і те, що ви бачите на SQL Server.
Тепер у серії радіо кнопок трохи вище sortкнопки другий рядок позначений "числовим". Виберіть перемикач "увімкнено".
Натисніть sortкнопку ще раз, і вам слід отримати наступне:
[1] 1
[2] 2
[7] 3
[4] 6
[8] 10
[6] 10A
[3] 10B
[5] 11
Запитання, чи працює це, коли числова частина знаходиться посередині рядка? Гаразд, вставте наступне в область введення тексту з лівого боку (замінивши попередній список):
Script - 1.sql
Script - 2.sql
Script - 10B.sql
Script - 6.sql
Script - 11.sql
Script - 10A.sql
Script - 3.sql
Script - 10.sql
Переконайтесь, що для цифрового налаштування все ще встановлено значення "увімкнено". Натисніть sortкнопку ще раз, і вам слід отримати наступне:
[1] Script - 1.sql
[2] Script - 2.sql
[7] Script - 3.sql
[4] Script - 6.sql
[8] Script - 10.sql
[6] Script - 10A.sql
[3] Script - 10B.sql
[5] Script - 11.sql
Хочете побачити це в іншому місці? Створіть папку на жорсткому диску, на зразок C: \ temp \ sorting \ , і створіть порожні файли тих самих імен "Script -...". Виконайте DIR
командне вікно, і ви побачите стандартне сортування. Але при перегляді списку файлів у Windows Explorer ви побачите список, відсортований за допомогою параметра "числовий" :-).