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.