【DB】部分MySQL操做記錄

工做中涉及到部分統計工做,剛好把以前的有些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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相關文章
相關標籤/搜索