sql >> Database >  >> RDS >> Mysql

Tijdspanne - Controleer voor weekdag en tijd van de dag in mysql

EDIT - Aangepast om te voldoen aan criteria (eindtijd) gespecificeerd in opmerkingen:

Ik denk dat u het tarief van elke dag afzonderlijk wilt opslaan. Sla ten minste één waarde op met de laatste minuut van een bepaalde dag als laatste verzameltarief (dit is de enige rij voor dagen met een enkel tarief voor de hele dag). Raadpleeg op een bepaalde dag/tijd deze tabel om het gegeven tarief voor die periode te bepalen. Zie hieronder:

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

Gezien deze gegevens, de volgende vraag:

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

Retourneert de resultatenset voor de specifieke uitvoeringstijd:

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


  1. MariaDB MaxScale Load Balancing op Docker:Beheer:deel twee

  2. Verzamelmethode:DELETE-procedure in Oracle Database

  3. Hoeveel sneller is MyISAM vergeleken met InnoDB?

  4. Beste gegevenstype om geldwaarden op te slaan in MySQL