Как отсортировать данные по буквенно-цифровым значениям - PullRequest
0 голосов
/ 10 декабря 2008

У меня есть эти значения: d1, d45, d79, d33, d100

Я хочу отсортировать эти переменные в порядке возрастания из моей таблицы.

Каков запрос, чтобы получить вывод как:

d1
d33
d45
d79
d100

Ответы [ 4 ]

1 голос
/ 10 декабря 2008

То, что вы хотите, называется «натуральный сорт». Для Microsoft SQL Server 2005 см. этот вопрос . Для других языков см. (Например) этот другой вопрос .

0 голосов
/ 10 декабря 2008

Если мы можем предположить, что значения данных содержат только букву d и числовое значение, то вы также можете использовать:

select column from YourTable
order by convert(int, replace(column, 'd', ''))

Если он содержит какие-либо другие буквы, этот метод быстро становится непригодным для использования:

select column from YourTable
order by convert(int, 
        replace(replace(replace(replace(replace(
            column, 'a', ''),
                'b', ''),
                'c', ''),
                'd', ''), 
                'e', '')
        )
0 голосов
/ 10 декабря 2008

Если вы можете гарантировать шаблон / \ w \ d + / ...

В постгрес:

select foo from bar order by cast(substring(foo from 2) as int)

.. и подобное будет существовать для других разновидностей SQL. Дорогой ум.

edit: решение для Android тоже выглядит хорошо:

..order by char_length(foo),foo
0 голосов
/ 10 декабря 2008

Извините, но не SQL-ответ. :) Для варианта с одной буквой только порядок по длине и альфа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...