Re: IsDate() - IsNumric()

From: Mario Guerrero <chimuelo22(at)yahoo(dot)es>
To: Alvaro Herrera <alvherre(at)commandprompt(dot)com>, "pg_espaol" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: IsDate() - IsNumric()
Date: 2005-12-28 04:52:31
Message-ID: 20051228045231.66354.qmail@web86807.mail.ukl.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola, muchisimas gracias por la repuesta. intente validar la fecha con las sguites funciones:

CREATE FUNCTION isdate(text, text, text) RETURNS char(1) AS'
SELECT
CASE WHEN $1 >= ''0001'' AND $1 = ''01''
AND ($2 IN (''04'', ''06'', ''09'', ''11'') AND $3 >= ''0''
AND $3 <= ''29'')
OR ($2 = ''02'' AND MOD($1::int, 4) = 0
AND MOD($1::int, 100) = 0
AND MOD($1::int, 400) = 0
AND $3 <= ''29'')
OR ($2 IN (''01'', ''03'', ''05'', ''07'', ''08'', ''10'', ''12'') AND
$3 <= ''31'')
THEN ''Y''
ELSE ''N''
END
'LANGUAGE SQL;

CREATE OR REPLACE FUNCTION isdate(text) RETURNS char(1) AS '
select COALESCE(CASE WHEN SUBSTR($1,5,1) ~ ''[\-]'' AND SUBSTR($1,8,1) ~ ''[\-]'' THEN ''t'' ELSE ''f'' END,
isdate(SUBSTR($1,1,4), SUBSTR($1,6,2), SUBSTR($1,9,2)))
' LANGUAGE 'sql';

Pero valida unicamente las cadenas que tengan el formato de la fecha como se guardan en la BD. Retorna lo siguiente:

para xdfxxdfadsf NO es fecha (esta bien validado)
para 2005-10-23 si es fecha (esta bien validado)
para 2005-25-12 NO es fecha (esta mal validado)
para 2005/10/23 NO es fecha (esta mal validado)
para 23-10-2005 NO es fecha (esta mal validado)

Es decir en el campo en el que estan estos valores(char(10)) unicamente dice que son fecha aquellos que guardan el formato de almacenamiento de fechas de la BD. Todavia estoy en el intento de crear esta funcion, nuevamente cualquier ayuda les agradezco de antemano.

Mario Guerrero.

Alvaro Herrera <alvherre(at)commandprompt(dot)com> escribió:
Mario Guerrero escribió:
> Hola grupo, Buscando estas funciones para postgres solo encontre la isnumeric:
>
> CREATE FUNCTION isnumeric(text) RETURNS boolean AS '
> SELECT $1 ~ ''^[0-9]+$''
> ' LANGUAGE 'sql';
>
> para validar numeros, o
>
> CREATE FUNCTION isnumeric(text) RETURNS boolean AS '
> SELECT $1 ~ ''^([0-9]+|[0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+)$''
> ' LANGUAGE 'sql';
>
>
> para validar numeros con punto (decimales).
> Bueno aun no he podido encontrar nada con respecto al Isdate, pero si uds saben de una solucion, les agradezco.

A esta hora solo se me ocurre algo como

create function isdate(text) returns boolean language plpgsql as $$
begin
perform $1::date;
return true;
exception when others then
return false;
end
$$;

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

---------------------------(fin del mensaje)---------------------------
TIP 2: puedes desuscribirte de todas las listas simultáneamente
(envíe "unregister TuDirecciónDeCorreo" a majordomo(at)postgresql(dot)org)


---------------------------------

Correo Yahoo!
Comprueba qué es nuevo, aquí
http://correo.yahoo.es

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Antonio 2005-12-28 10:01:10 Re: Conectar PostgreSQL con LInux
Previous Message Felipe Araoz Ramos 2005-12-28 03:30:12 Conectar PostgreSQL con LInux