mysql日期和字符相互轉換方法mysql
date_format(date,'%Y-%m-%d') -------------->oracle中的to_char();git
str_to_date(date,'%Y-%m-%d') -------------->oracle中的to_date();sql
%Y:表明4位的年份express
%y:表明2爲的年份oracle
%m:表明月, 格式爲(01……12) spa
%c:表明月, 格式爲(1……12)orm
%d:表明月份中的天數,格式爲(00……31) 字符串
%e:表明月份中的天數, 格式爲(0……31) it
%H:表明小時,格式爲(00……23) io
%k:表明 小時,格式爲(0……23)
%h: 表明小時,格式爲(01……12)
%I: 表明小時,格式爲(01……12)
%l :表明小時,格式爲(1……12)
%i: 表明分鐘, 格式爲(00……59)
%r:表明 時間,格式爲12 小時(hh:mm:ss [AP]M)
%T:表明 時間,格式爲24 小時(hh:mm:ss)
%S:表明 秒,格式爲(00……59)
%s:表明 秒,格式爲(00……59)
好比有如下表結構:
mysql> desc logistics_express_trajectory;
+-------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+--------------+------+-----+---------+-------+
| id | varchar(32) | NO | PRI | NULL | |
| longitude | varchar(32) | YES | | NULL | |
| latitude | varchar(32) | YES | | NULL | |
| create_date | datetime | YES | | NULL | |
| modify_date | datetime | YES | | NULL | |
| member_express_id | varchar(32) | YES | MUL | NULL | |
| loctime | varchar(32) | YES | | NULL | |
| radius | varchar(16) | YES | | NULL | |
| speed | varchar(16) | YES | | NULL | |
| orient | varchar(16) | YES | | NULL | |
| location | varchar(256) | YES | | NULL | |
| client_loctime | datetime | YES | | NULL | |
| flag | int(11) | YES | | NULL | |
+-------------------+--------------+------+-----+---------+-------+
其中loctime爲字符串格式的時間,格式爲yyyy-mm-dd hh24:mi:ss,要把每條記錄對應的client_loctime更新爲loctime的date格式,能夠執行如下語句:
update logistics_express_trajectory set client_loctime = str_to_date(loctime, '%Y-%m-%d %H:%i:%s') where loctime is not null;
注意mysql不會對錯誤的格式做檢驗,好比我執行語句(注意紅字部分):
update logistics_express_trajectory set client_loctime = str_to_date(loctime, '%Y-%m-$d %H:%i:%s') where loctime is not null;
mysql也會提示執行完成,但更新後client_loctime是空的,這個問題竟然搞了我十幾分鍾,汗!