[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