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

Zapisywanie 30-lut na Mysql (formatowanie daty)

Zapisanie takiej „wartości” DATE w DATE lub DATETIME kolumna jest możliwa przy użyciu sql_mode ALLOW_INVALID_DATES i bez trybu ścisłego:

Tak więc sprawdzenie daty pod kątem dozwolonej daty contable można wykonać za pomocą wyzwalaczy, ponieważ nie ma też innego sprawdzenia. Zakładam, że dla tego wniosku 31 dzień każdego miesiąca byłby nieprawidłową datą.

Przykład:

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;

Wynik:

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

Demo

Korzystanie z MySQL Workbench, które mam z

SELECT contable_date FROM example

następujący wynik:

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

ale to nie działa na sqlfiddle.com.

Nie polecałbym tego jednak, zwłaszcza że nie można używać ścisłego trybu SQL. Należy również wziąć pod uwagę wpływ na funkcje daty i czasu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP i mod_dbd

  2. SELECT widoku zawiera podzapytanie w klauzuli FROM

  3. Pobieranie pojedynczego wiersza z tabeli łączenia

  4. Jak sprawdzić, czy w tabeli znajdują się zduplikowane wartości kolumn, zanim wstawię je za pomocą Perla?

  5. Jak uzyskać rekordy bieżącego miesiąca w MySQL?