sql >> Base de Datos >  >> RDS >> Mysql

Intervalo de tiempo:verifique el día de la semana y la hora del día en mysql

EDITAR:modificado para cumplir con los criterios (hora de finalización) especificados en los comentarios:

Creo que lo que querrá hacer es almacenar la tarifa de cada día por separado. Almacene al menos un valor con el último minuto de un día determinado como tasa general final (esta será la única fila para los días con una sola tasa durante todo el día). En cualquier día/hora, simplemente consulte esta tabla para determinar la tarifa dada para ese período de tiempo. Ver a continuación:

DROP TABLE IF EXISTS tRate;
CREATE TABLE tRate (
    rateId         INT(11) UNSIGNED NOT NULL auto_increment,
    rateDay        TINYINT(1),
    rateEndTime  TIME,
    rate           DECIMAL(9,2),
    PRIMARY KEY (rateId)
)
;

INSERT INTO tRate VALUES
(NULL, 0, '00:10:00', '0.80'),
(NULL, 0, '23:59:59', '0.90'),
(NULL, 1, '00:10:00', '0.90'),
(NULL, 1, '00:16:00', '0.75'),
(NULL, 1, '23:59:59', '0.90')
-- (etc. for all days 0-6)
;

SET @execDay  = DATE_FORMAT(NOW(), '%w');       -- 1 in the case of today for the resultset below
SET @execTime = DATE_FORMAT(NOW(), '%H:%m:%s'); -- 14:02:33 at the time this example was run

Dados estos datos, la siguiente consulta:

SELECT *
FROM
    tRate
WHERE
    rateDay = @execDay
    and @execTime < rateEndTime
;

Devuelve el conjunto de resultados para el tiempo de ejecución particular:

+--------+---------+-------------+------+
| rateId | rateDay | rateEndTime | rate |
+--------+---------+-------------+------+
|      5 |       1 | 23:59:59    | 0.90 |
+--------+---------+-------------+------+