[firebase-br] Colocar em ordem Varchar

Sandro Souza escovadordebits em gmail.com
Ter Jun 16 12:53:02 -03 2009


Bom dia/tarde Rubens.

Grande Rubens, acredito que você possa resolver isso com uma simples stored
procedure que extraia apenas os dígitos do texto informado e retorne o seu
respectivo valor inteiro (concatenando todos os dígitos encontrados e
convertendo tudo para um inteiro).

A stored procedure poderia ser como a seguinte:

SET TERM ^ ;

CREATE OR ALTER PROCEDURE SO_DIGITOS(
  TEXTO VARCHAR(100)
)RETURNS(
  RESULTADO INTEGER
)AS
DECLARE VARIABLE INDICE INTEGER;
DECLARE VARIABLE CARACTER VARCHAR(1);
BEGIN
  -- Nao informou um texto a ser processado?
  IF (TEXTO IS NULL) THEN
    -- Tambem retorna NULL.
    RESULTADO = NULL;
  ELSE
  BEGIN
    -- Inicializa o resultado.
    RESULTADO = 0;
    -- Inicializa o contador do laco.
    INDICE = 1;
    -- Laco de processamento do texto.
    WHILE (1=1) DO
    BEGIN
      -- Obtem o proximo caracter do texto informado.
      CARACTER = SUBSTRING(TEXTO FROM INDICE FOR 1);
      -- Passou do fim do texto?
      IF ((CARACTER IS NULL)OR(CARACTER = '')) THEN
        -- Sai desse laco.
        LEAVE;
      -- O caracter atual eh um digito?
      IF (CARACTER BETWEEN '0' AND '9') THEN
        -- Atualiza o resultado.
        RESULTADO = (RESULTADO * 10) + CAST(CARACTER AS INTEGER);
      -- Proximo caracter.
      INDICE = INDICE + 1;
    END -- WHILE
  END -- ELSE
  -- Envia o resultado.
  SUSPEND;
END^

SET TERM ; ^

Agora tente utilizada, como no exemplo abaixo:

SELECT
   ....
  (SELECT RESULTADO FROM SO_DIGITOS(SEU_CAMPO_ALFANUMERICO)) VALOR_EXTRAIDO,
  ...

Espero ter ajudado mais que atrapalhado. :D

2009/6/16 Rubens - Solucao Empresarial <rubens em solucaoempresarial.net>

> Boa tarde pessoal
> tenho um problema
> tenho um campo na tabela de produtos que o codigo e um campo VARCHAR(20) e
> como usa numeros e letras pois e pecas de carro tambem usa / ou -
> ex: 123X; 123-1X; 432-01; 5-01; 21-A
> preciso colocar em ordem numerica para sair assim
>     5-01; 21-A; 123X; 123-1X; 432-01
> e ta saindo assim pois coloquei em ordem
>     123X; 123-1X; 21-A;  432-01; 5-01
> no clipper tinha um (STR(VAL)) que transformaca caracter em numerico
> alguem sabe como fazer isso no firebird ou no delphi
> agradeco
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista