как правильно выполнить max () для буквенно-цифрового столбца - PullRequest
2 голосов
/ 09 июня 2011

У меня есть таблица для пользователей, идентификаторы которых такие: ASmith1, Asmith2, Asmith3, Asmith5, Asmith9, Asmith10, Asmith13, Asmith15, Asmith21 и т. Д.

Когда я получаю Max () этого столбца, я получаю Asmith9. Какой запрос или функцию я могу использовать, чтобы получить Asmith21?

Ответы [ 3 ]

4 голосов
/ 09 июня 2011
   declare @Users table(ID varchar(10));
    insert into @Users
        select  'ASmith1' union all 
        select  'Asmith2' union all 
        select  'Asmith3' union all 
        select  'Asmith5' union all 
        select  'Asmith9' union all 
        select  'Asmith10' union all 
        select  'Asmith13' union all 
        select  'Asmith15' union all 
        select  'Asmith21'

    select  top 1 ID
    from    @Users
    order
    by      len(ID) desc, ID desc;
0 голосов
/ 09 июня 2011

Если у вас есть контроль над именами, вы можете добавлять суффиксы к числам, используя достаточно начальных нулей для ваших нужд. В противном случае вам нужно будет отделить числовую часть от альфа-части и соответственно отсортировать.

В SQL Server нет готовых регулярных выражений, но вы можете создать для него функцию, как показано в этой статье, которая использует доступ SQL Server к .Net:

http://msdn.microsoft.com/en-us/magazine/cc163473.aspx

0 голосов
/ 09 июня 2011

Нет возможных решений напрямую, однако вы можете хранить строки фиксированной длины, тогда это возможно, например:

Asmith001, Ashmith002, Ashmit021, Ashmit100

Другой метод - использование строковых функций для достижения подобных целей в запросе, а затем вы можете заказать.

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