2010-07-21 115 views
39

如何將以下內容轉換爲插入/更新到MySQL的TIMESTAMPDATE字段的日期?MySQL中的解析日期

'15-Dec-09' 

DATE_FORMAT()用於格式化日期,但不是反過來。

回答

81

您可能想要使用STR_TO_DATE()函數。這是DATE_FORMAT()函數的反函數。

STR_TO_DATE(STR,格式)

這是DATE_FORMAT()函數的反函數。它採用字符串str和格式字符串formatSTR_TO_DATE()如果格式字符串包含日期和時間部分,則返回DATETIME值;如果字符串僅包含日期或時間部分,則返回值DATETIME。如果從str提取的日期,時間或日期時間值是非法的,STR_TO_DATE()返回NULL併產生警告。

實施例:

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

它不以'6/20/2013'格式工作。 – 2013-08-06 07:25:50

+2

@Sunny:您是否將聲明更改爲'STR_TO_DATE('6/20/2013','%c /%d /%Y')'? – Fluff 2014-03-10 04:38:57

+0

@Daniel是啊...我已經解決了,謝謝承認。 – 2014-03-10 05:02:05

27

下面是DATE_FORMAT()STR_TO_DATE()使用格式%-codes的表。

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

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

通過有針對未填補的幾分鐘或幾秒鐘沒有%-codes方式:

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

在行動:

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