2010-07-21 16 views
39

Come convertire quanto segue in data per l'inserimento/aggiornamento in un TIMESTAMP o DATE campo in MySQL?data Parse in MySQL

'15-Dec-09' 

DATE_FORMAT() viene utilizzato per il formato della data, ma non il contrario.

risposta

81

Si consiglia di utilizzare la funzione STR_TO_DATE(). È l'inverso della funzione DATE_FORMAT().

STR_TO_DATE (str, formato)

Questa è l'inverso della funzione DATE_FORMAT(). Prende una stringa str e una stringa di formato format. STR_TO_DATE() restituisce un valore DATETIME se la stringa di formato contiene parti di data e ora o un valore DATE o TIME se la stringa contiene solo parti di data o ora. Se la data, l'ora o il valore datetime estratti da str sono illegali, STR_TO_DATE() restituisce NULL e genera un avviso.

Esempio:

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

non è così lavora per data nel formato '6/20/2013'. –

+2

@Sunny: hai modificato l'istruzione in 'STR_TO_DATE ('6/20/2013', '% c /% d /% Y')'? – Fluff

+0

@Daniel si ... l'ho già risolto, grazie per il riconoscimento. –

27

Ecco una tabella di formato% -codes utilizzato in DATE_FORMAT() e 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) 
%% %   % 

o

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

Tra l'altro non ci sono -codes% per i minuti non imbottiti o secondi:

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

in azione:

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