MySQL: Problem med CURDATE()

Här diskuteras programmering och utveckling
Christian Holmberg
Inlägg: 194
Blev medlem: 02 nov 2006, 22:02
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

MySQL: Problem med CURDATE()

Inlägg av Christian Holmberg »

Har en tabell som ser ut som följande:

Kod: Markera allt

--------------
DESCRIBE Transactions
--------------

+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| TransID | int(11)     | NO   | PRI | NULL    | auto_increment |
| OrderID | int(11)     | NO   | MUL | NULL    |                |
| DVDID   | smallint(6) | NO   | MUL | NULL    |                |
| DateOut | date        | NO   |     | NULL    |                |
| DateDue | date        | NO   |     | NULL    |                |
| DateIn  | date        | NO   |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+
När jag försöker köra kommandot:

Kod: Markera allt

> INSERT INTO Transactions (OrderID, DVDID, DateOut, DateDue) VALUES (1, 1, CURDATE(), CURDATE()+3);
Så får jag följande felmedeleande:

Kod: Markera allt

ERROR 1292 (22007): Incorrect date value: '20180230' for column 'DateDue' at row 1
jag kan dock köra

Kod: Markera allt

--------------
SELECT CURDATE() + 3
--------------

+---------------+
| CURDATE() + 3 |
+---------------+
|      20180230 |
+---------------+
1 row in set (0,00 sec)
utan några större problem, bortsätt från att feburari inte har 30 dagar.
Hur kan man råda bot på mina problem?
Användarvisningsbild
Nemo
Inlägg: 732
Blev medlem: 16 aug 2010, 19:39
OS: Kubuntu
Utgåva: 18.04 Bionic Beaver LTS

Re: MySQL: Problem med CURDATE()

Inlägg av Nemo »

Christian Holmberg skrev: När jag försöker köra kommandot:

Kod: Markera allt

> INSERT INTO Transactions (OrderID, DVDID, DateOut, DateDue) VALUES (1, 1, CURDATE(), CURDATE()+3);
Så får jag följande felmedeleande:

Kod: Markera allt

ERROR 1292 (22007): Incorrect date value: '20180230' for column 'DateDue' at row 1
Felmeddelandet anger att 20180230 inte är ett giltigt datum, vilket stämmer, då det inte finns nǻgon 30 februari.

Verkar vara någon bugg. Vad händer om du anger CURDATE()+5 ? Får du 20180301 då? Har inte provat MySQL, men normalt ska den räkna ut rätt datum. Vet inte varför den har problem med just februari månad.
Christian Holmberg skrev:jag kan dock köra

Kod: Markera allt

--------------
SELECT CURDATE() + 3
--------------

+---------------+
| CURDATE() + 3 |
+---------------+
|      20180230 |
+---------------+
1 row in set (0,00 sec)
utan några större problem, bortsätt från att feburari inte har 30 dagar.
Hur kan man råda bot på mina problem?
Detta stärker mina misstankar att det är en bugg i MySQL. Den ska inte ge svaret 20180230 på den fråga du kör, utan borde ange 20180302.

Har du provat hur den svarar på månader med 30 dagar? Ger den t.ex. 20180431 som svar om du formulerar om din SQL fråga? Jag gissar att det är fel i februari, men mitt tips är att du testar på alla månader som inte har 31 dagar för att se var felet inträffar.
franzhaenel
Inlägg: 2
Blev medlem: 09 apr 2018, 14:59
OS: Ubuntu
Utgåva: 16.04 Xenial Xerus LTS
Kontakt:

Re: MySQL: Problem med CURDATE()

Inlägg av franzhaenel »

SELECT CURDATE()+3 är inte det samma som dagens datum + 3 dagar utan omvandling av datumet till ett numeriskt värde samt + 3. Säga vad man vill om att det går att göra det utan varning men korrekt addering av datum är på följande sätt:

Kod: Markera allt

mysql> SELECT DATE_ADD(CURDATE(), INTERVAL 3 DAY);
+-------------------------------------+
| DATE_ADD(CURDATE(), INTERVAL 3 DAY) |
+-------------------------------------+
| 2018-04-12                          |
+-------------------------------------+

Som synes hanterar den även februari korrekt ;)

Kod: Markera allt

mysql> SELECT DATE_ADD('2018-02-27', INTERVAL 3 DAY);
+----------------------------------------+
| DATE_ADD('2018-02-27', INTERVAL 3 DAY) |
+----------------------------------------+
| 2018-03-02                             |
+----------------------------------------+
Driver sajten https://www.car.info
Skriv svar

Återgå till "Programmering och webbdesign"