MySQL - Duda con las fechas

 
Vista:
sin imagen de perfil

Duda con las fechas

Publicado por Fran (5 intervenciones) el 22/04/2016 17:15:07
Tengo este enunciado:

Haz un trigger que no acepte capturas realizadas durante el verano (del 21 de julio al 21 de septiembre).
El trigger ahora mismo funciona correctamente.

Tengo esto ahora mismo:

1
2
3
4
5
6
7
8
9
DROP TRIGGER IF EXISTS ej2_bi;
DELIMITER //
CREATE TRIGGER ej2_bi BEFORE INSERT ON captures FOR EACH ROW
BEGIN
	IF new.data BETWEEN "2016/07/01" AND "2016/09/01" THEN
		SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='Fecha fuera de lo permitido para pescar', MYSQL_ERRNO=1001;
	END IF;
END //
DELIMITER ;

Como puedo hacer que las fechas, en lugar de 2016 sea cualquier año? Se Puede? Como esta ahora mismo lo veo una chapuza. Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Duda con las fechas

Publicado por eyanezve (17 intervenciones) el 25/04/2016 17:32:59
Hola

Formatea la fecha, desde el cliente de consola

1
2
3
4
5
6
7
8
mysql> SET @f =  date_format(now(), '%m/%d');
mysql> SELECT IF(@f > '07/01' AND @f < '09/01', 'yes', 'no');
+------------------------------------------------+
| IF(@f > '07/01' AND @f < '09/01', 'yes', 'no') |
+------------------------------------------------+
| no                                             |
+------------------------------------------------+
1 row in set (0,00 sec)

Pero si lo cambio

1
2
3
4
5
6
7
8
9
mysql> SET @f =  date_format('2015/08/01', '%m/%d');Query OK, 0 rows affected (0,03 sec)
 
mysql> SELECT IF(@f > '07/01' AND @f < '09/01', 'yes', 'no');
+------------------------------------------------+
| IF(@f > '07/01' AND @f < '09/01', 'yes', 'no') |
+------------------------------------------------+
| yes                                            |
+------------------------------------------------+
1 row in set (0,00 sec)


Creo que debería funcionar sin problema, no lo probe

1
2
3
IF date_format(new.data, '%m/%d') BETWEEN "07/01" AND "09/01" THEN
	SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='Fecha fuera de lo permitido para pescar', MYSQL_ERRNO=1001;
END IF;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Duda con las fechas

Publicado por Fran (5 intervenciones) el 25/04/2016 18:29:25
Muchas gracias. ahora probare.

Indagando por internet también encontré esta solución algo más rebuscada.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
DROP TRIGGER IF EXISTS ej2_bi;
DELIMITER //
CREATE TRIGGER ej2_bi BEFORE INSERT ON captures FOR EACH ROW
BEGIN
    DECLARE vfecha VARCHAR(15);
	DECLARE vini VARCHAR(15);
	DECLARE vfin VARCHAR(15);
	DECLARE vany VARCHAR(6);
 
	SET vfecha = CAST(new.data AS CHAR);
	SET vany = SUBSTR(new.data, 1, 4);
	SET vini = CONCAT(vany, "/", "07", "/","21");
	SET vfin = CONCAT(vany, "/", "09", "/","21");
 
	IF new.data BETWEEN CAST(vini AS DATE) AND CAST(vfin AS DATE) THEN
		SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='Fecha fuera de lo permitido para pescar', MYSQL_ERRNO=1001;
 
	END IF;
END //
DELIMITER ;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar