Как отсортировать текстовое поле по алфавиту?
У меня есть пара записей, которые нужно отсортировать, но поле varchar. Они используют английский алфавит от A-Z. После Z он идет от AA, AB, AC и т. д. Например:
CREATE TABLE #foo(x VARCHAR(30));
INSERT #foo(x) SELECT 'A'
UNION SELECT 'AA'
UNION SELECT 'Z'
UNION SELECT 'B'
UNION SELECT 'AB'
UNION SELECT 'BB';
Порядок, который я хочу в результате:
A
B
Z
AA
AB
BB
Я знаю, что должен использовать числовое поле и Сортировать по нему, но на данный момент у меня нет такой возможности. Я использую SQL Server, и интерфейс находится в отчете в Access 2010.4 ответа:
Это может сработать. Вы можете сортировать по длине значения, которое сгруппирует одиночные символы, за которыми следуют двойные символы. Внутри этих групп значения будут отсортированы в алфавитном порядке.
SELECT Column1 FROM dbo.Table1 ORDER BY LEN(Column1) , Column1
Ладно, я немного запутался. Это звучит так, как будто вы хотите фанки порядка сортировки. Вы хотите сначала отдельные буквы, а затем нормальный порядок сортировки. (Полностью нормальный вид будет иметь A, AA, AB, AC, затем B)
Во-первых, простая сортировка по алфавитному полю
Но это не то, чего ты хочешь. Проблема в том, что вы никогда не говорите нам, где вы хотите ААА. Идет ли он после АА или после ZZ ?select SORTFIELD, OTHER, COLUMNS, IN-TABLE from MYTABLE order by SORTFIELD
AAA после ZZ:
select SORTFIELD, OTHER, COLUMNS, IN-TABLE from MYTABLE order by LEN(SORTFIELD), SORTFIELD
AAA после AA (перед AB)
select SORTFIELD, OTHER, COLUMNS, IN-TABLE from MYTABLE order by case LEN(SORTFIELD) when 1 then 0 else 1 end , SORTFIELD
Declare @SomeStuff table (val varchar(10)); Insert @SomeStuff (val) Values ('a'); Insert @SomeStuff (val) Values ('b'); Insert @SomeStuff (val) Values ('c'); Insert @SomeStuff (val) Values ('az'); Insert @SomeStuff (val) Values ('ab'); Insert @SomeStuff (val) Values ('zz'); Insert @SomeStuff (val) Values ('abc1'); Select * From @SomeStuff order by LEN(val), val
Использует SQL Server, но все равно должен работать.
Результаты:
val --- a b c ab az zz abc1