Olá Anderrssoon,
Por acaso a coluna "EQ_TAGSISO" de seu ORDER BY é sempre formada por esta máscara: "TC-nnnn" ?
Se for este o caso, acho que você consegue fazer uma ordenação correta usando as funções REPLACE, UPPER e TO_NUMBER.
Teste este exemplo em seu ambiente de desenvolvimento:
Selecionar tudo
Conectado a:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production
SQL> CREATE TABLE LIXO (CODIGO VARCHAR2(10));
Tabela criada.
SQL> INSERT INTO LIXO VALUES ('TC-0100');
1 linha criada.
SQL> INSERT INTO LIXO VALUES ('TC-10');
1 linha criada.
SQL> INSERT INTO LIXO VALUES ('Tc-11');
1 linha criada.
SQL> INSERT INTO LIXO VALUES ('tc-1');
1 linha criada.
SQL> COMMIT;
Commit concluido.
SQL> SELECT * FROM LIXO ORDER BY TO_NUMBER(REPLACE(UPPER(REPLACE(TRIM(CODIGO),' ','')),'TC-',''));
CODIGO
----------
tc-1
TC-10
Tc-11
TC-0100
SQL>
No exemplo acima, note que usei mais de um REPLACE, além de TRIM e UPPER. Fiz isso mais "por segurança", para garantir que estes filtros somente retornem números. O inconveniente desta solução - entretanto- é que você se tornará "refém dos dados" que forem armazenados na tabela. Se alguém digitar "TA-", "TO-", "ABACAXI-","ZA-", etc, você vai se deparar com um erro em sua querie. E pode ser bem trabalhoso identificar qual registro foi preenchido de forma errada.
Todo este trabalho que mostrei acima pode ser bastante simplificado se você usar EXPRESSOES REGULARES. Por exemplo, o SELECT acima poderia ser reescrito da seguinte forma:
Selecionar tudo
SQL> SELECT * FROM LIXO ORDER BY TO_NUMBER(REGEXP_REPLACE(CODIGO, '[^[:digit:]]+', ''));
CODIGO
----------
tc-1
TC-10
Tc-11
TC-0100
Este exemplo de expressão regular eu obtive a partir do link :
http://stackoverflow.com/questions/3968 ... n-a-string
Abraços e boa sorte,
Sergio Coutinho