> 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 J. ADAMI
http://www.adamiworks.com
@tiadami
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral