sql >> Databáze >  >> RDS >> Mysql

Úspora 30-února na Mysql (formátování data)

Uložení takové "hodnoty" DATE do DATE nebo DATETIME sloupec je možný pomocí sql_mode ALLOW_INVALID_DATES a žádný přísný režim:

Takže kontrola data pro povolené contable datum by mohla být provedena pomocí triggerů, protože neexistuje žádná jiná kontrola. Předpokládám, že pro tuto aplikaci by 31. den každého měsíce bylo neplatné datum.

Příklad:

CREATE TABLE example (
  contable_date DATE NOT NULL
) ENGINE=INNODB;

-- set the sql_mode (here for the session)
SET @@SESSION.sql_mode = 'ALLOW_INVALID_DATES';

INSERT INTO example (contable_date) VALUES ("2014-02-30");

SELECT 
    DAY(contable_date) as cday,
    MONTH(contable_date) as cmonth,
    TIMESTAMPDIFF(DAY, contable_date, '2014-03-30') as cdiff
FROM 
    example;

Výsledek:

cday  cmonth  cdiff
-------------------
  30       2     28

Ukázka

Používání MySQL Workbench, které dostávám s

SELECT contable_date FROM example

následující výsledek:

contable_date
-------------
   2014-02-30

ale to nefunguje na sqlfiddle.com.

Nedoporučoval bych to však, zejména proto, že není možné používat striktní režim SQL. Měli bychom také zvážit vliv na funkce data a času.




  1. Jak nakonfigurovat Ruby on Rails s Oracle?

  2. Jak monitorovat nasazení MySQL pomocí Prometheus &Grafana na ScaleGrid

  3. Cizí klíče MySQL – jak vynutit individuální přístup napříč tabulkami?

  4. ignorování fulltextových ignorovaných slov mysql v dotazu