quarta-feira, 18 de dezembro de 2013

Ordenando uma consulta com o delimitador '/' no SQL Server 2008

Olá galera,

Hoje mostrarei como ordenar strings com delimitador '/' no SQL Server 2008. Imagine um campo cujo formato é 1/2013. O dígito antes da '/' é um número de autoincremento e após a barra é o ano corrente. Supondo que nossa tabela foi dada carga com as informações abaixo.

codigo
1/2013
2/2013
3/2013
9/2013
11/2013
12/2013
2/2014
12/2014
20/2014

Vamos executar uma simples consulta organizando pelo código.

SELECT codigo FROM tabela ORDER BY codigo ASC
codigo
1/2013
11/2013
12/2013
12/2014
2/2013
2/2014
20/2014
3/2013
9/2013

A informação foi organizada realmente mas o resultado ideal seria como a tabela abaixo.

codigo
1/2013
2/2013
3/2013
9/2013
11/2013
12/2013
2/2014
12/2014
20/2014

Para obter esse resultado, minha solução foi o SQL abaixo.

SELECT codigo FROM tabela ORDER BY RIGHT(codigo, CHARINDEX('/', REVERSE(codigo))-1) ASC,
CONVERT(INT, LEFT(codigo, LEN(codigo) - CHARINDEX('/', REVERSE(codigo)))) ASC

Citarei cada uma das funções utilizadas na consulta.

  • RIGHT - Retorna a parte da direita de uma cadeia de caracteres com o número de caracteres especificado.
  • CHARINDEX - Pesquisa uma expressão para outra e retorna sua posição inicial, se for localizada.
  • REVERSE - Retorna a ordem inversa de um valor da cadeia de caracteres.
  • CONVERT - Converte uma expressão de um tipo de dados em outro.
  • LEFT - Retorna a parte da esquerda de uma cadeia de caracteres com o número de caracteres especificado.
  • LEN - Retorna o número de caracteres da expressão da cadeia de caracteres especificada, excluindo espaços em branco à direita.

OBS: Todas as descrições de cada função foram retiradas do site http://technet.microsoft.com/pt-br/library/ms174318.aspx

Conhece outra forma de fazer essa ordenação ?! Compartilhe conosco postando sua solução.

Um grande abraço a todos e até a próxima.

Nenhum comentário:

Postar um comentário