/ / Mysql: dátum konverzie „dd / mm / rrrr“ na „yyyymmdd“ - mysql, dátum

Mysql: dátum prevodu od 'dd / mm / rrr' 'do' yyyymmdd '- mysql, dátum

Im pracovať na databáze, ktorá ukladá dáta v varchar(10) mysql pole (tak smutné).

Nemôžem zmeniť štruktúru databázy (im budovanie malý plug-in), ale musím dotaz databázu nájsť riadky, kde je toto dátové pole medzi najbližších 10 dní.

Príklad:

| fid | fdate      |
|  1  | 10/09/2010 |
|  2  | 17/09/2010 |
|  3  | 19/09/2010 |

Musím dostať riadky s fid 1 a 2, becose dátum je <= teraz + 10 dní.

Obvykle robím tento druh dopytu:

SELECT fid FROM table WHERE fdate <= DATE_ADD(NOW(), INTERVAL 10 DAY);

Alebo ak je dátum vo formáte `yyyymmdd ':

SELECT fid FROM table WHERE fdate <= DATE_FORMAT(NOW(), "%Y%m%d");

Ale s formátom sú k ničomu dd/mm/yyyy.

Prišiel som na to

SELECT fid, CONCAT(SUBSTRING(fdate, 7, 4), SUBSTRING(fdate, 4, 2), SUBSTRING(fdate, 1, 2)) AS mydate FROM table HAVING mydate <= DATE_ADD(NOW(), INTERVAL 10 DAY);

ale myslím, že je to trochu overkill prestavba formát dátumu s concat a podreťazec, a having klauzule zvyknutý pomáhať rýchlosti dotazu.

Nejaký nápad?

UPRAVIŤ

Po Adrianovom komentári je správne riešenie

SELECT fid FROM test WHERE STR_TO_DATE(fdate, "%d/%m/%Y") <= DATE_ADD(NOW(), INTERVAL 10 DAY);

tak sa môžem vyhnúť concatu a mať klauzulu.

odpovede:

7 pre odpoveď č. 1

A čo s použitím str_to_date () vytvoriť dátum z vášho formátu?

UPRAVIŤ po prečítaní komentára som vytvoril tabuľku, ako je tá vaša:

mysql> SELECT fid, fdate FROM test;
+------+------------+
| fid  | fdate      |
+------+------------+
|    1 | 10/9/2010  |
|    2 | 17/9/2010  |
|    3 | 19/09/2010 |
+------+------------+

a potom

mysql> SELECT fid FROM test WHERE STR_TO_DATE(fdate, "%d/%m/%Y") <= DATE_ADD(NOW(), INTERVAL 10 DAY);
+------+
| fid  |
+------+
|    1 |
|    2 |
+------+

Zdá sa, že funguje. Čo presne dostanete?