web-dev-qa-db-fra.com

Analyser la date dans MySQL

Comment convertir les éléments suivants en date d'insertion/mise à jour dans un champ TIMESTAMP ou DATE dans MySQL?

'15-Dec-09'

DATE_FORMAT() est utilisé pour formater la date, mais pas l'inverse.

43
user157195

Vous pouvez utiliser la fonction STR_TO_DATE() . C'est l'inverse de la fonction DATE_FORMAT() .

STR_TO_DATE (str, format)

C'est l'inverse de la fonction DATE_FORMAT(). Il prend une chaîne str et une chaîne de format format. STR_TO_DATE() renvoie une valeur DATETIME si la chaîne de format contient des parties de date et d'heure, ou une valeur DATE ou TIME si la chaîne contient uniquement la date ou l'heure les pièces. Si la valeur de date, d'heure ou de date/heure extraite de str est illégale, STR_TO_DATE() renvoie NULL et génère un avertissement.

Exemple:

SELECT STR_TO_DATE('15-Dec-09', '%d-%b-%y') AS date;
+------------+
| date       |
+------------+
| 2009-12-15 |
+------------+
1 row in set (0.00 sec)
94
Daniel Vassallo

Voici un tableau du format% -codes utilisé dans DATE_FORMAT () et STR_TO_DATE () .

     -----examples-for------
     1999-12-31   2000-01-02
     23:59:58.999 03:04:05      identical to
     ------------ ----------    -------------
 %a  Fri          Sun      LEFT(DAYNAME(d),3)
 %b  Dec          Jan      LEFT(MONTHNAME(d),3)
 %c  12           1             MONTH(d)            
 %D  31st         2nd           DAYOFMONTH(d)+st,nd,rd
 %d  31           02       LPAD(DAYOFMONTH(d),0,2)
 %e  31           2             DAYOFMONTH(d)     
 %f  999000       000000   LPAD(MICROSECOND(t),6,0)
 %H  23           03       LPAD(HOUR(t),2,0)
 %h  11           03
 %I  11           03
 %i  59           04       LPAD(MINUTE(t),2,0)
 %j  365          002
 %k  23           3             HOUR(t)             
 %l  11           3
 %M  December     January       MONTHNAME(d)  
 %m  12           01       LPAD(MONTH(d),2,0) 
 %p  PM           AM
 %r  11:59:58 PM  03:04:05 AM
 %S  58           05       LPAD(SECOND(t),2,0)
 %s  58           05       LPAD(SECOND(t),2,0)
 %T  23:59:58     03:04:05
 %U  52           01       LPAD(WEEK(d,0),2,0)
 %u  52           00       LPAD(WEEK(d,1),2,0)
 %V  52           01      RIGHT(YEARWEEK(d,2),2)
 %v  52           52      RIGHT(YEARWEEK(d,3),2)
 %W  Friday       Sunday        DAYNAME(d)
 %w  5            0             DAYOFWEEK(d)-1
 %X  1999         2000     LEFT(YEARWEEK(d,2),4)
 %x  1999         1999     LEFT(YEARWEEK(d,3),4)
 %Y  1999         2000          YEAR(d)   
 %y  99           00      RIGHT(YEAR(d),2)
 %%  %            %

ou

%X%V 199952       200001        YEARWEEK(d,2)
%x%v 199952       199952        YEARWEEK(d,3)

Soit dit en passant, il n'y a pas de code% pour les minutes ou les secondes non remplies:

     59           4             MINUTE(t)  
     58           5             SECOND(t)

En action:

 '15-Dec-09' == DATE_FORMAT('2009-12-15', '%d-%b-%y')
 '2009-12-15' == STR_TO_DATE('15-Dec-09', '%d-%b-%y')
34
Bob Stein