Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Hil Design

Função que Verificar se a Data é válida

Recommended Posts

galera fiz essa funcao pra validar data

 

ta meio gambi pois to usando o extract

 

exemplo: se tentar validar uma data no formato yyyy/mm/dd com 2002/02/30, naum vai validar, pois o mes 02 naum tem 30 dias e assim por diante...

 

ta funfando, mas realmente gostaria de melhorar...

 

CREATE DEFINER = CURRENT_USER FUNCTION `isDataValida`( valor VARCHAR ( 8 ))

RETURNS tinyint(1)

NOT DETERMINISTIC

SQL SECURITY DEFINER

COMMENT ''

BEGIN

IF NOT(IFNULL(extract(DAY from valor), 0) = "0"

or IFNULL(extract(MONTH from valor), 0) = "0"

or IFNULL(extract(YEAR from valor), 0) = "0") THEN

RETURN TRUE;

ELSE

RETURN FALSE;

END IF;

END;

 

se alguem tiver alguma sugestão de como melhorar...

pode ate ser haja alguma funcao interna do MySQL, mas naum achei...

 

desde já agradeço

Compartilhar este post


Link para o post
Compartilhar em outros sites

agora tbm verifica se a data esta num periodo valido... MAS AINDA DA PRA MELHORAR

 

CREATE DEFINER = CURRENT_USER FUNCTION `isDataValida`( valor vARCHAR ( 8 ))

RETURNS tinyint(1)

NOT DETERMINISTIC

SQL SECURITY DEFINER

COMMENT ''

BEGIN

IF ((NOT(IFNULL(extract(DAY from valor), 0) = "0"

OR IFNULL(extract(MONTH from valor), 0) = "0"

OR IFNULL(extract(YEAR from valor), 0) = "0"))

AND (valor BETWEEN "1980-01-01" AND CURRENT_DATE))THEN

RETURN TRUE;

ELSE

RETURN FALSE;

END IF;

END;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cruz Credo.....

 

 

 

SELECT DATE_FORMAT( '2007-12-06', '%w' )

 

Retorna > 4 (hj eh quarta)

 

 

SELECT DATE_FORMAT( '2007-02-31', '%w' )

 

Retorna > NULL (a data nao existe)

 

 

pode usar o %w ou qualquer outra formatação, sempre retornar NULL eh pq a data nao existe...

Compartilhar este post


Link para o post
Compartilhar em outros sites

o date_format naum servio

 

BEGIN

IF ((IFNULL(EXTRACT(MONTH FROM valor), 0) <> "0")

AND (valor BETWEEN "1900-01-01" AND CURRENT_DATE)) THEN

RETURN TRUE;

ELSE

RETURN FALSE;

END IF;

END

 

isso retorna true mesmo q o formato da data seja 20001212 ou 2000-12-12 ou 2000/12/12

 

 

mas ainda da pra melhorar

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.