On 16-10-2015 13:38, Tiago José Adami wrote:
>> O problema é que o campo está sem mascara e telefones convencionais juntos,
>> ou seja aquela bagunça de sempre,
>> exemplo:
>> 48-33333333
>> 49-9999-0000
>> 049-9999-0000
>> (49)9999-0000
>> (49)99990000
>>
>> por isso queria ver se alguem tinha alguma função para compartilhar, algo do
>> tipo regex, pois não consigo entender como funciona essa parada.
> 
> Opa, veja se isso te ajuda. São duas funções: uma para formatar os
> números removendo caracteres não numéricos e a outra que compara e
> verifica se é um número de telefone móvel começando com os dígitos 8
> ou 9 (considerando que esta é a regra):
> 
> CREATE OR REPLACE FUNCTION uf_format_phone_number(
>     a_number BPCHAR
> )
> RETURNS BPCHAR AS
> $BODY$
> DECLARE
>     lc_number BPCHAR;
>     lc_char   BPCHAR;
>     li_len INTEGER;
> BEGIN
>     li_len := LENGTH(a_number);
>     lc_number := '';
> 
>     FOR i IN 1..li_len LOOP
>         lc_char = SUBSTR(a_number,i,1);
> 
>         IF POSITION(lc_char IN '0123456789')<=0 THEN
>             CONTINUE;
>         END IF;
> 
>         lc_number := lc_number || lc_char;
>     END LOOP;
> 
>     lc_number := CAST(CAST(lc_number AS NUMERIC(20,0)) AS BPCHAR);
> 
>     RETURN lc_number;
> 
> END;
> $BODY$
> LANGUAGE 'plpgsql' IMMUTABLE;
> 
> 
> CREATE OR REPLACE FUNCTION uf_is_mobile_number(
>     a_number BPCHAR
> )
> RETURNS BOOLEAN AS
> $$
>     SELECT uf_format_phone_number(a_number) ~ '^[1-9]{2}[8-9][0-9]{7,8}$'
> $$
> LANGUAGE SQL;
> 
> Eu fiz estas funções conferindo a explicação de um post no
> StackOverflow [1] sobre regex para o mesmo fim.
> 
> Para verificar se um número é ou não de telefonia móvel, use a função
> 'uf_is_mobile_number':
> 
> SELECT uf_is_mobile_number('(099)9999-9999');
> 
> 
> Referências:
> [1] 
> http://pt.stackoverflow.com/questions/46672/como-fazer-uma-express%C3%A3o-regular-para-telefone-celular
> 

Tiago,

Bem interessante, porque vc não adiciona isso ao nosso wiki [1].

Att,


[1] https://wiki.postgresql.org/wiki/Snippets

-- 
   Fabrízio de Royes Mello         Timbira - http://www.timbira.com.br/
   PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a