Como Ordenar Dados em Banco de Dados com ORDER BY Seguindo uma Ordem Específica

Métodos de Ordenação Personalizada em SQL

Em muitas aplicações, é necessário fornecer resultados de consulta ordenados de acordo com requisitos específicos. Existem várias abordagens para implementar ordenação personalizada em SQL, conforme discutido abaixo:

1. Ordenação Nível de Instrução SQL

Para aplicações que exigem ordenação específica em determinados pontos do sistema, você pode configurar diretamente nas instruções SQL:

  • Ordenação padrão do Oracle: ``` SELECT * FROM tabela ORDER BY coluna (DESC|ASC);
    
     (A ordenação padrão é ascendente; para campos numéricos, a ordenação ascendente ou descendente é explícita)
    
  • Ordenação persoanlizada: ``` SELECT * FROM tabela ORDER BY CASE WHEN coluna = 'valor1' THEN 1 WHEN coluna = 'valor2' THEN 2 WHEN coluna = 'valor3' THEN 3 WHEN coluna = 'valor4' THEN 4 ELSE 5 END;
    
    

2. Métodos de Ordenação para Chinês

Para ordenar dados chinesos, existem métodos específicos (a ordenação padrão para chinês geralmente segue a ordem fonética):

  • Ordenação por pinyin: ``` SELECT * FROM tabela ORDER BY NLSSORT(coluna, 'NLS_SORT=SCHINESE_PINYIN_M');
  • Ordenação por traços de caracteres: ``` SELECT * FROM tabela ORDER BY NLSSORT(coluna, 'NLS_SORT=SCHINESE_STROKE_M');
  • Ordenação por radical: ``` SELECT * FROM tabela ORDER BY NLSSORT(coluna, 'NLS_SORT=SCHINESE_RADICAL_M');
    
    

Nota importante: Com grandes volumes de dados, essas consultas podem ser lentas. De acordo com a documentação oficial do Oracle, a criação de índices segue a ordem binária das chaves. Quando NLS_SORT é definido como BINARY, o otimizador pode usar índices para cláusulas ORDER BY. Para qualquer ordenação linguística, o otimizador deve incluir uma varredura completa da tabela e uma classificação completa no plano de execução.

Para otimizar, você pode criar um índice linguístico:

CREATE INDEX indice_linguistico ON minha_tabela (NLSSORT(nome, 'NLS_SORT = SCHINESE_PINYIN_M'));

3. Configuração de Ordenação Nível de Sessão

Se você precisar de um método de ordenação específico para toda a sessão, configure-o no nível da sessão:

  • Por pinyin: ALTER SESSION SET NLS_SORT = SCHINESE_PINYIN_M;
  • Por traços: ALTER SESSION SET NLS_SORT = SCHINESE_STROKE_M;
  • Por radical: ALTER SESSION SET NLS_SORT = SCHINESE_RADICAL_M;

4. Configuração de Ordenação Nível de Sistema

Para aplicar uma ordenação específica a todo o sistema (menos comum):

  • No Windows: Modificar o registro em HKLC\SOFTWARE\ORACLE\home0\NLS_SORT
  • Em outros sistemas: Definir a variável de ambiente export NLS_SORT=SCHINESE_RADICAL_M

Tags: SQL Oracle ORDER BY Classificação de Dados NLS_SORT

Publicado em 6-15 05:21 por Thomas