Função isdigit no Postgres
Esta função escalar excelente para testar se um derterminado campo tem strings, letras ou apenas números em Postgres.
Retorna true para verdadeiro caso seja apenas números e false para falso, caso encontre textos dentro do campo.
Espero ter ajudado.
Segue fonte abaixo:
-- apagar se existir DROP FUNCTION IF EXISTS usf_isdigit(text); CREATE FUNCTION usf_isdigit(text) RETURNS BOOLEAN AS $$ -- -- Nome Artefato/Programa..: usf_isdigit.sql -- Autor(es)...............: Emerson Hermann (emersonhermann [at] gmail.com) O Peregrino (http://www.emersonhermann.blogspot.com) adaptado de Manuel Sugawara em http://bytes.com/topic/postgresql/answers/174214-determine-if-string-digit -- Data Inicio ............: 08/07/2011 -- Data Atualizacao........: 12/04/2018 -- Versao..................: 0.03 -- Compilador/Interpretador: PostgreSql -- Sistemas Operacionais...: Linux/Windows -- SGBD....................: Postgres 8.x/9.x/10.x -- Kernel..................: Nao informado! -- Finalidade..............: store procedure (user store function - usf) para testa se um campo eh digito ou nao, retorna true para verdadeiro e false para falso -- OBS.....................: -- SELECT CASE WHEN (array_upper(string_to_array($1, '.'),1) > 2 ) THEN FALSE ELSE $1 ~ '^(-)?\.|[0-9]+$' END AS usf_isdigit /* Exemplo: SELECT usf_isdigit('ISSO É UM VALOR NUMERICO?'); -- retorna false SELECT usf_isdigit('ISSO É UM VALOR N.UMER.IC.O?'); -- retorna false SELECT usf_isdigit('ISSO É UM VALOR N.UMERICO?'); -- retorna false SELECT usf_isdigit('3000'); --retorna true SELECT usf_isdigit('2700.00'); --retorno true SELECT usf_isdigit('2700.00.00'); --retorno false */ $$ LANGUAGE SQL;
Olá Pelegrino !
ResponderExcluirExpressão Regular is rox !
Att,
Sakamoto
MyTraceLog - Registro de um DBA
http://mytracelog.blogspot.com
Legal!
ResponderExcluirE se eu quiser que '2700.00' retorne True como sendo um número ? Como eu faço ?
ResponderExcluirCorrigido!
ExcluirPor segurança alterei para usf_isdigit
Favor testar !
Obrigado por sugestão
Antes era sp_isdigit
ExcluirE o regex era $1 ~ '^(-)?[0-9]+$'
Agora eh $1 ~ '^(-)?\.|[0-9]+$'
Sendo que se houverem mais de dois pontos não considera número.
Vlw
Funcionou perfeitamente, O Peregrino. Obrigado, ótimo!
ExcluirHenrique.