2010-07-21 9 views
39

Comment convertir le suivant en date d'insertion/mise à jour dans un champ TIMESTAMP ou DATE dans MySQL?Parse date dans MySQL

'15-Dec-09' 

DATE_FORMAT() est utilisé à ce jour de format, mais pas l'inverse.

Répondre

81

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

STR_TO_DATE (str, format)

Ceci est l'inverse de la fonction DATE_FORMAT(). Il faut 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 des parties de date ou d'heure. Si la date, l'heure ou la valeur datetime 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) 
+0

elle ne présente pas travailler pour date au format '20/06/2013'. –

+2

@Sunny: Avez-vous changé l'instruction en STR_TO_DATE ('20/06/2013', '% c /% d /% Y') '? – Fluff

+0

@Daniel ouais ... Je l'ai déjà résolu, merci d'avoir reconnu. –

27

Voici une table 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) 

D'ailleurs il n'y a pas% -codes pour unpadded minutes ou secondes:

 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')