> 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 pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral