Mysql
 sql >> база данни >  >> RDS >> Mysql

Запазване на 30 февруари в Mysql (форматиране на дата)

Записване на такава "стойност" на DATE в DATE или DATETIME колоната е възможна с помощта на sql_mode ALLOW_INVALID_DATES и без строг режим:

Така че проверката на датата за разрешена контабилна дата може да се извърши с тригери, тъй като няма и друга проверка. Предполагам, че за това приложение 31-во число на всеки месец ще бъде невалидна дата.

Пример:

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;

Резултат:

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

Демо

Използвайки MySQL Workbench, който получавам с

SELECT contable_date FROM example

следния резултат:

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

но това не работи в sqlfiddle.com.

Не бих препоръчал това обаче, особено защото човек не може да използва строг SQL режим. Трябва да се вземе предвид и ефектът върху функциите за дата и час.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Неправилен ред на ръководството

  2. Как да използвам каскада за изтриване на MySQL MyISAM механизъм за съхранение?

  3. Някой има ли сериозно доказателство, че CHAR е по-бърз от VARCHAR?

  4. Грешка в заявката на Python/MySQL:„Неизвестна колона“.

  5. MySQL корелирана подзаявка в синтаксис на JOIN