Eu tenho uma unidade de mesa
nome da unidade |
---|
unidade 1 |
unidade 2b |
unidade 2c |
unidade 2a |
unidade 10 |
unidade 3a |
unidade 3c |
unidade 11 |
Eu quero classificar o mesmo que
nome da unidade |
---|
unidade 1 |
unidade 2a |
unidade 2b |
unidade 2c |
unidade 3a |
unidade 3c |
unidade 10 |
unidade 11 |
Como podemos conseguir isso em t-sql?
DDL
create table units (unitname varchar(20))
insert into units values ('unit 1'),('unit 2b'),('unit 2c'),
('unit 2a'),('unit 10'),('unit 3a'),('unit 3c'),('unit 11')
Para os valores de exemplo fornecidos:
A ideia é classificar pelo número máximo de caracteres que podem ser convertidos com sucesso em um número inteiro, desfazendo os empates com o caractere final.
Como alternativa, essa ideia insere zeros de prefixo suficientes para que a classificação de caracteres funcione conforme o esperado:
Ambos retornam:
demonstração on-line db<>fiddle
Um design de tabela melhor pode ser:
Eu tentei a seguinte abordagem
Embora isso funcione no meu caso, alguém pode sugerir uma abordagem melhor?
Eu faria algo assim (escrevi em pseudo-código para fins de tempo):