sql >> Databasteknik >  >> RDS >> Mysql

Sparar 30-feb på Mysql (datumformatering)

Spara ett sådant DATUM-"värde" i en DATE eller DATETIME kolumnen är möjlig med sql_mode ALLOW_INVALID_DATES och inget strikt läge:

Så att kontrollera datumet för ett tillåtet datum kan göras med triggers, eftersom det inte finns någon annan kontroll också. Jag antar att för denna ansökan skulle den 31:e varje månad vara ett ogiltigt datum.

Exempel:

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

Använder MySQL Workbench jag får med

SELECT contable_date FROM example

följande resultat:

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

men det här fungerar inte på sqlfiddle.com.

Jag skulle dock inte rekommendera detta, speciellt eftersom man inte kan använda strikt SQL-läge. Man bör också överväga effekten på datum- och tidsfunktionerna.




  1. Ansluta Delphi på Linux till SQL Server

  2. Få kolumnnamn och värden för loop PHP

  3. Skapa en array från en MySQL-tabell

  4. Försöker fylla en rullgardinsmeny i codeigniter med mysql-data