DATE_FORMAT(date,format)根據(jù)格式串format格式化日期或日期和時間值date,返回結(jié)果串??捎肈ATE_FORMAT()來格式化DATE或DATETIME值,以便得到所希望的格式。根據(jù)format字符串格式化date值:%S,%s兩位數(shù)字形式的秒(00,01,...,59)%i兩位數(shù)字形式的分(00,01,...,59)%H兩位數(shù)字形式的小時,24小時(00,01,...,23)%h,%I兩位數(shù)字形式的小時,12小時(01,02,...,12)%k數(shù)字形式的小時,24小時(0,1,...,23)%l數(shù)字形式的小時,12小時(1,2,...,12)%T24小時的時間形式(hh:mm:ss)%r12小時的時間形式(hh:mm:ssAM或hh:mm:ssPM)%pAM或PM%W一周中每一天的名稱(Sunday,Monday,...,Saturday)%a一周中每一天名稱的縮寫(Sun,Mon,...,Sat)%d兩位數(shù)字表示月中的天數(shù)(00,01,...,31)%e數(shù)字形式表示月中的天數(shù)(1,2,...,31)%D英文后綴表示月中的天數(shù)(1st,2nd,3rd,...)%w以數(shù)字形式表示周中的天數(shù)(0=Sunday,1=Monday,...,6=Saturday)%j以三位數(shù)字表示年中的天數(shù)(001,002,...,366)%U周(0,1,52),其中Sunday為周中的第一天%u周(0,1,52),其中Monday為周中的第一天%M月名(January,February,...,December)%b縮寫的月名(January,February,...,December)%m兩位數(shù)字表示的月份(01,02,...,12)%c數(shù)字表示的月份(1,2,...,12)%Y四位數(shù)字表示的年份%y兩位數(shù)字表示的年份%%直接值“%”selectdate_format(日期字段,’%Y-%m-%d’)as‘日期’fromtest
我們擁有10余年網(wǎng)頁設(shè)計和網(wǎng)站建設(shè)經(jīng)驗,從網(wǎng)站策劃到網(wǎng)站制作,我們的網(wǎng)頁設(shè)計師為您提供的解決方案。為企業(yè)提供成都網(wǎng)站設(shè)計、網(wǎng)站制作、微信開發(fā)、小程序開發(fā)、移動網(wǎng)站建設(shè)、H5網(wǎng)站設(shè)計、等業(yè)務(wù)。無論您有什么樣的網(wǎng)站設(shè)計或者設(shè)計方案要求,我們都將富于創(chuàng)造性的提供專業(yè)設(shè)計服務(wù)并滿足您的需求。
寫過PHP+MySQL的程序員都知道有時間差,UNIX時間戳和格式化日期是我們常打交道的兩個時間表示形式,Unix時間戳存儲、處理方便,但是不直觀,格式化日期直觀,但是處理起來不如Unix時間戳那么自如,所以有的時候需要互相轉(zhuǎn)換,下面給出互相轉(zhuǎn)換的幾種轉(zhuǎn)換方式。
一、在MySQL中完成
這種方式在MySQL查詢語句中轉(zhuǎn)換,優(yōu)點是不占用PHP解析器的解析時間,速度快,缺點是只能用在數(shù)據(jù)庫查詢中,有局限性。
1. UNIX時間戳轉(zhuǎn)換為日期用函數(shù): FROM_UNIXTIME()
一般形式:select FROM_UNIXTIME(1156219870);
2. 日期轉(zhuǎn)換為UNIX時間戳用函數(shù): UNIX_TIMESTAMP()
一般形式:Select UNIX_TIMESTAMP('2006-11-04 12:23:00′);
舉例:mysql查詢當(dāng)天的記錄數(shù):
$sql=”select * from message Where DATE_FORMAT(FROM_UNIXTIME(chattime),'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d') order by id desc”;
當(dāng)然大家也可以選擇在PHP中進(jìn)行轉(zhuǎn)換,下面說說在PHP中轉(zhuǎn)換。
二、在PHP中完成
這種方式在PHP程序中完成轉(zhuǎn)換,優(yōu)點是無論是不是數(shù)據(jù)庫中查詢獲得的數(shù)據(jù)都能轉(zhuǎn)換,轉(zhuǎn)換范圍不受限制,缺點是占用PHP解析器的解析時間,速度相對慢。
1. UNIX時間戳轉(zhuǎn)換為日期用函數(shù): date()
一般形式:date('Y-m-d H:i:s', 1156219870);
2. 日期轉(zhuǎn)換為UNIX時間戳用函數(shù):strtotime()
一般形式:strtotime('2010-03-24 08:15:42');
用正則表達(dá)式選擇出來,然后用函數(shù)str_to_date來轉(zhuǎn)換
update table_name set release_date = STR_TO_DATE(REPLACE(release_date,' ',''),'%d %M %Y @') where release_date REGEXP'^[0-9]{1,2}.*[July|Janurary|February|May|June|July|August|September|October|November|December|March].*@.*[0-9]$';
其他的類似哦
從mysql搬一個大表到redis中,你會發(fā)現(xiàn)在提取、轉(zhuǎn)換或是載入一行數(shù)據(jù)時,速度慢的讓你難以忍受。這里我就要告訴一個讓你解脫的小技巧。使用“管道輸出”的方式把mysql命令行產(chǎn)生的內(nèi)容直接傳遞給redis-cli,以繞過“中間件”的方式使兩者在進(jìn)行數(shù)據(jù)操作時達(dá)到最佳速度。
一個約八百萬行數(shù)據(jù)的mysql表,原本導(dǎo)入到redis中需要90分鐘,使用這個方法后,只需要兩分鐘。不管你信不信,反正我是信了。
Mysql到Redis的數(shù)據(jù)協(xié)議
redis-cli命令行工具有一個批量插入模式,是專門為批量執(zhí)行命令設(shè)計的。這第一步就是把Mysql查詢的內(nèi)容格式化成redis-cli可用的數(shù)據(jù)格式。here we go!
我的統(tǒng)計表:
?1234567 CREATE TABLE events_all_time ( id int(11) unsigned NOT NULL AUTO_INCREMENT, action varchar(255) NOT NULL, count int(11) NOT NULL DEFAULT 0, PRIMARY KEY (id), UNIQUE KEY uniq_action (action) );準(zhǔn)備在每行數(shù)據(jù)中執(zhí)行的redis命令如下:
HSET events_all_time [action] [count]
按照以上redis命令規(guī)則,創(chuàng)建一個events_to_redis.sql文件,內(nèi)容是用來生成redis數(shù)據(jù)協(xié)議格式的SQL:
-- events_to_redis.sql
?12345678910111213141516171819 SELECT CONCAT( "*4\r\n", '$', LENGTH(redis_cmd), '\r\n', redis_cmd, '\r\n', '$', LENGTH(redis_key), '\r\n', redis_key, '\r\n', '$', LENGTH(hkey), '\r\n', hkey, '\r\n', '$', LENGTH(hval), '\r\n', hval, '\r') FROM ( SELECT 'HSET' as redis_cmd, 'events_all_time' AS redis_key, action AS hkey, count AS hval FROM events_all_time ) AS tok, 用下面的命令執(zhí)行:
?1 mysql stats_db --skip-column-names --raw events_to_redis.sql | redis-cli --pipe很重要的mysql參數(shù)說明:
1.--raw: 使mysql不轉(zhuǎn)換字段值中的換行符。
2.--skip-column-names: 使mysql輸出的每行中不包含列名。