UDF para posição de substring na string

Firebird

30/12/2006

Pessoal!
Preciso fazer um consulta em um campo do tipo varchar que armazena apenas endereço de email, eu precisava pegar tudo que estiver antes do arroba ´@´
Algo mais ou menos assim:

select substring( EMAIL from 1 for (até o ´@´) ) from USUARIO


Se o firebird tivesse a função Pos do delphi:

select substring( EMAIL from 1 for Pos(´@´, EMAIL) ) from USUARIO


Seria facil resolver o problema. Entao pensei em fazer uma UDF para me retornar a posição do ´@´ para que eu possa informar a função Substring
Estou fazendo assim:

Código da DLL:
library UdfPos;

uses
  SysUtils, Classes;

{$R *.res}

function RetornaPos( pTexto : WideString ) : Integer; StdCall;
begin
  Result := Pos( ´@´, pTexto );
end;

Exports
  RetornaPos;

begin
end.



No firebird declarei assim:
DECLARE EXTERNAL FUNCTION POSICAO_CARACTERE
    VARCHAR(100)
RETURNS INTEGER BY VALUE
ENTRY_POINT ´RetornaPos´ MODULE_NAME ´UdfPos.dll´



Só que nao esta funcionando, esta sempre retornando 0 (zero). Estou testando da seguinte maneira no IbExpert:
select posicao_caractere(´email@teste.com.br´) from rdb$database



Alguem sabe o que tem de errado com tudo isso que eu fiz?

Fico no aguardo.


Feliz 2007 para todos!!!!


Mmoreira

Mmoreira

Curtidas 0
POSTAR