sql >> Database >  >> RDS >> Mysql

30 februari opslaan op Mysql (datumopmaak)

Zo'n DATE "waarde" opslaan in een DATE of DATETIME kolom is mogelijk met behulp van de sql_mode ALLOW_INVALID_DATES en geen strikte modus:

Dus het controleren van de datum voor een toegestane contable-datum kan worden gedaan met triggers, omdat er ook geen andere controle is. Ik neem aan dat voor deze aanvraag de 31e van elke maand een ongeldige datum zou zijn.

Voorbeeld:

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;

Resultaat:

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

Demo

MySQL Workbench gebruiken die ik krijg met

SELECT contable_date FROM example

volgend resultaat:

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

maar dit werkt niet op sqlfiddle.com.

Ik zou dit echter niet aanbevelen, vooral omdat men niet in staat is om de strikte SQL-modus te gebruiken. Men moet ook rekening houden met het effect op de datum- en tijdfuncties.




  1. MySQL-fout bij het maken van een externe sleutel met Laravel-migratie

  2. Een blog maken in PHP en MySQL-database - Backend

  3. De regels van Codd in SQL

  4. Is er geen optie om de kolomnaam in het vervolgmodel toe te wijzen?