У меня есть столбец section , который является varchar , и я пытаюсь sort таким образом, чтобы я получил результат, как показано ниже,
Section
-------
1
100
11
180a
18a
18b
19B
2
A1
A10
A11
A18
A180
A189
A19
A1B
AB1
AB10
AB100
Aquaman
B1
B2
B20
B21
B3
B32
S
Superman
Я ожидаю, что результат будет таким, как показано ниже. сначала я получаю числа, отсортированные по возрастанию, затем альфа-числовые значения, а затем, наконец, значения символов.
Не будет проблемой, если сначала будут значения символов, затем буквенно-цифровые, а затем цифры.
Section
-------
1
2
11
100
18a
18b
19B
180a
A1
A10
A11
A18
A19
A180
A189
A1B
AB1
AB10
AB100
B1
B2
B20
B21
B3
B32
Aquaman
S
Superman
Я попробовал следующий запрос, с которым я приблизился к степени, но не совсем кчто я ожидаю.
SELECT Section
FROM dbo.Section_suw
ORDER BY
case when ISNUMERIC(Section)=0 then Section else '0' end,
case when ISNUMERIC(Section)=1 then CONVERT(INT, Section) else -1 end
Демонстрационная таблица для тестирования,
CREATE TABLE dbo.Section_suw
(
Section varchar(50) NULL
)
INSERT INTO dbo.Section_suw (Section.Section) VALUES ('1')
INSERT INTO dbo.Section_suw (Section.Section) VALUES ('AB1')
INSERT INTO dbo.Section_suw (Section.Section) VALUES ('A1')
INSERT INTO dbo.Section_suw (Section.Section) VALUES ('B2')
INSERT INTO dbo.Section_suw (Section.Section) VALUES ('A11')
INSERT INTO dbo.Section_suw (Section.Section) VALUES ('B20')
INSERT INTO dbo.Section_suw (Section.Section) VALUES ('B21')
INSERT INTO dbo.Section_suw (Section.Section) VALUES ('AB10')
INSERT INTO dbo.Section_suw (Section.Section) VALUES ('B3')
INSERT INTO dbo.Section_suw (Section.Section) VALUES ('AB100')
INSERT INTO dbo.Section_suw (Section.Section) VALUES ('2')
INSERT INTO dbo.Section_suw (Section.Section) VALUES ('B1')
INSERT INTO dbo.Section_suw (Section.Section) VALUES ('B32')
INSERT INTO dbo.Section_suw (Section.Section) VALUES ('11')
INSERT INTO dbo.Section_suw (Section.Section) VALUES ('A10')
INSERT INTO dbo.Section_suw (Section.Section) VALUES ('A1B')
INSERT INTO dbo.Section_suw (Section.Section) VALUES ('A180')
INSERT INTO dbo.Section_suw (Section.Section) VALUES ('A189')
INSERT INTO dbo.Section_suw (Section.Section) VALUES ('180a')
INSERT INTO dbo.Section_suw (Section.Section) VALUES ('18a')
INSERT INTO dbo.Section_suw (Section.Section) VALUES ('18b')
INSERT INTO dbo.Section_suw (Section.Section) VALUES ('A18')
INSERT INTO dbo.Section_suw (Section.Section) VALUES ('A19')
INSERT INTO dbo.Section_suw (Section.Section) VALUES ('19B')
INSERT INTO dbo.Section_suw (Section.Section) VALUES ('100')
INSERT INTO dbo.Section_suw (Section.Section) VALUES ('Superman')
INSERT INTO dbo.Section_suw (Section.Section) VALUES ('Aquaman')
INSERT INTO dbo.Section_suw (Section.Section) VALUES ('S')
Заранее спасибо