Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zakres czasu - Sprawdź dzień tygodnia i porę dnia w mysql

EDIT - Zmodyfikowano w celu spełnienia kryteriów (czas zakończenia) określonych w komentarzach:

Wierzę, że będziesz chciał zrobić osobno stawkę każdego dnia. Przechowuj co najmniej jedną wartość z ostatnią minutą danego dnia jako ostateczną stawkę typu catch-all (będzie to jedyny wiersz dla dni z jedną stawką przez cały dzień). W dowolnym dniu/o określonej godzinie po prostu sprawdź tę tabelę, aby określić podaną stawkę dla tego okresu. Zobacz poniżej:

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

Biorąc pod uwagę te dane, następujące zapytanie:

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

Zwraca zestaw wyników dla określonego czasu wykonania:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Node MySQL wykonuje wiele zapytań najszybciej jak to możliwe

  2. Funkcja przechowywana w mySQL do tworzenia slug

  3. mysqli_stmt_get_result alternatywa dla php 5.2.6

  4. Wybierz wszystkie rekordy z jednej tabeli, które nie istnieją w innej tabeli w Laravel 5.1

  5. SQLSTATE[HY000]:Błąd ogólny:1298 Nieznana lub niepoprawna strefa czasowa:okna „UTC”