Примечания: Я считаю, что это не является не дубликата this seemingly related question, так как у меня есть реальные строки, которые содержат число вместо целых чисел, хранящихся в виде строк, как другой ОП.Collation для естественных порядка строк на числе они содержат
Я ищу способ вывода строк SQL, упорядоченных в натуральном порядке, числом, которое они содержат, как числовой инфикс. Например, Windows Explorer делает это естественно:
On DBA, я прочитал, что только цифры не имеют свойств для алфавитной сортировки, , но я уверен, что есть некоторые способа сделать это для чисел инфиксных без ведущие нули, потому что они являются значительным.
В SQL Server 2008 R2, мой сценарий примерно так:
DECLARE @Table TABLE (ID INT, Name VARCHAR(10));
INSERT INTO @Table (ID, Name) VALUES
(1,'name1file'), (5,'name11file'),
(2,'name2file'), (6,'name20file'),
(3,'name3file'), (7,'name21file'),
(4,'name10file');
SELECT * FROM @Table ORDER BY Name COLLATE Latin1_General_100_BIN ASC;
Примерные наборы результатов:
Output got Output desired
ID | Name ID | Name
========== ==========
1 | name1file 1 | name1file
4 | name10file 2 | name2file
5 | name11file 3 | name3file
2 | name2file 4 | name10file
6 | name20file 5 | name11file
7 | name21file 6 | name20file
3 | name3file 7 | name21file
Столбец ID
для иллюстративного предназначена только (можно просто ORDER BY ID
в том, что дело). Это только запрос запроса VARCHAR
. Я попытался использовать COLLATE
, но ни один из fn_helpcollations
, я попробовал, не получил желаемый заказ.
Итак, есть ли способ добиться того, что без с помощью SUBSTRING
или PATINDEX
или CLR функции или другое средство извлечения числа, возможно, с использованием соответствующего сортировки?
Если нет, существует ли причина, по которой этот общий вариант использования не применяется ни в одной из тысяч сортировок? Я надеялся, что Windows Explorer использовал для этого общую общую сортировку вместо реализации функции, такой как PHP natsort()
.
пожалуйста, вы можете дать некоторые оригинальные имена файлов? является префиксом и суффиксом константы числа, как вы указали в примере: «name» и «file». –
У файлов всегда есть имя # формат файла? Если это так, попробуйте 'ORDER BY LEN (Name), Name' – lad2025
Тот же вопрос о PostgreSQL - http://stackoverflow.com/questions/12965463/humanized-or-natural-number-sorting-of-mixed-word-and-number-strings. Ни одно из решений не будет ork на MS SQL без использования CLR. И это не будет быстрым в любом случае ... – Luaan