sql >> Database teknologi >  >> RDS >> Mysql

Gemmer 30-feb på Mysql (datoformatering)

At gemme sådan en DATO "værdi" i en DATE eller DATETIME kolonnen er mulig ved at bruge sql_mode ALLOW_INVALID_DATES og ingen streng tilstand:

Så tjek af datoen for en tilladt aftaledato kunne gøres med triggere, da der heller ikke er andre tjek. Jeg går ud fra, at for denne ansøgning ville den 31. i hver måned være en ugyldig dato.

Eksempel:

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;

Resultat:

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

Demo

Bruger MySQL Workbench jeg får med

SELECT contable_date FROM example

følgende resultat:

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

men dette virker ikke på sqlfiddle.com.

Jeg vil dog ikke anbefale dette, især fordi man ikke er i stand til at bruge streng SQL-tilstand. Man bør også overveje virkningen på dato- og tidsfunktionerne.




  1. LINQ til SQL hver n. række fra tabel

  2. Find N nærmeste linjestreng fra et punkt ved hjælp af MySQL Spatial Extensions

  3. Rapport fra dobbelt bogholderi

  4. Skift fra MySQL 5.7 til MySQL 8.0 - Hvad du bør vide