工做中涉及到部分統計工做,剛好把以前的有些SQL再熟悉回顧一下。php
一.涉及到時間統計部分:html
求時間差:mysql
SELECT TimeStampDiff(day, (SELECT date(create_date) FROM account WHERE ID = 37), (SELECT CURDATE())) AS '試用時間'; SELECT DATEDIFF ((SELECT date(create_date) FROM account WHERE ID = 37), (SELECT CURDATE())) AS '試用時間';
二者的結果是同樣的,以下:linux
這裏簡單說明一下:sql
簡單來講,其實裏面只是嵌套了兩個小的sql而已,若是這樣寫,可能你一會兒就明白了:shell
SELECT TimeStampDiff(day, "2017-02-20", "2017-07-07"); SELECT DATEDIFF("2017-02-20", "2017-07-07") AS DiffDate;
對的,其實就是這樣的,沒別的什麼。segmentfault
這裏補充幾條關於時間的SQL:
bash
-- 將當前時間拆分展現:
SELECT NOW(),CURDATE(),CURTIME();
-- 只展現日期,而不展現分鐘秒等,如:"2017-02-20"
SELECT date(create_date) FROM account WHERE ID = 37;spa
固然要計算某個時間到如今的時間查,有不少方法,也能夠用Linux shell方式去計算:日誌
以下:
#!/bin/bash # first_stamp=`date -d "2014-12-05 19:45:44" +%s` #計算指定日期的時間戳 today_stamp=`date +%s` #計算當天的時間戳 let day_stamp=($today_stamp - $first_stamp) #當天的時間戳減去指定的時間戳 let day=($day_stamp/86400) #相差的時間戳除以一天的秒數就獲得天數 echo $day
或者:
start=`date +%s -d "2012-11-28 15:55:37"` end=`date +%s -d "2017-07-07 15:55:52"` echo $(($end-$start))
若是是日誌文件,而不是SQL文件的話,能夠用另外的方式進行:
# 若是日誌文件輸出格式是上述的話,還有個方法: cat 日誌文件 | awk '/^000/{ start=$2 " " $3 end=$4 " " $5 stm=mktime(gensub(/[:-]/, " ", "g", start)) etm=mktime(gensub(/[:-]/, " ", "g", end)) print $1 " - " etm-stm }'
關於SQL中時間相關,參考:http://www.phpernote.com/mysql/1130.html 這裏也有一些使用的小技巧。
固然更完整的,仍是參考W3School:https://www.w3cschool.cn/mysql/func-date.html
關於Linux中的時間:
關於時間,在Linux中能夠直接安裝,並顯示日曆:
sudo apt-get install cal
關於日誌,還有其餘一些更詳細的命令,直接man一下,能夠看到更多。
順便提一個問題:若是要問你歷史上某一天是星期幾(過去或者將來),你怎麼作呢?好比說998年2月3日,或者3456年7月9日;你怎麼作呢?
我看到這裏有一個有趣的帖子:http://www.javashuo.com/article/p-somjjobo-w.html,做者寫的很認真,把計算方法,原理等所有寫了出來。
但若是當你在linux環境中,能夠直接一條命令能夠獲取到結果:
以下:
cal 998-02-03,或者cal 3456-07-09
-------文末彩蛋:
你能夠試試 1752年9月份看看:
更多有趣信息,請參考:http://www.cnblogs.com/haochuang/p/7133518.html
啊