2010-07-21 16 views
39

Cómo convertir el siguiente en la fecha para la inserción/actualización en un campo TIMESTAMP o DATE en MySQL?fecha Analizar en MySQL

'15-Dec-09' 

DATE_FORMAT() se utiliza para el formato de fecha, pero no al revés.

Respuesta

81

Es posible que desee utilizar la función STR_TO_DATE(). Es el inverso de la función DATE_FORMAT().

STR_TO_DATE (str, formato)

Ésta es la inversa de la función DATE_FORMAT(). Toma una cadena str y una cadena de formato format. STR_TO_DATE() devuelve un valor DATETIME si la cadena de formato contiene partes de fecha y hora, o un valor DATE o TIME si la cadena contiene solo partes de fecha u hora. Si la fecha, la hora o el valor datetime extraído de str es ilegal, STR_TO_DATE() devuelve NULL y genera una advertencia.

Ejemplo:

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

no lo hace trabajar para la fecha en formato '20/6/2013'. –

+2

@Sunny: ¿Cambió la declaración a 'STR_TO_DATE ('20/06/2013', '% c /% d /% Y')'? – Fluff

+0

@Daniel, sí ... Ya lo he resuelto, gracias por reconocerlo. –

27

Aquí hay una tabla de formato% -Códigos utilizado en DATE_FORMAT() y 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) 

Por cierto no hay -Códigos% de minutos o segundos sin relleno:

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

en acción:

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