天天看點

mysql sql 常用指令和函數

MySQL中時間函數NOW()和SYSDATE()的差別

SELECT NOW(),SYSDATE(),SLEEP(3),NOW(),SYSDATE()

先查詢了NOW()和SYSDATE(),然後sleep了3秒,再查詢NOW()和SYSDATE()

NOW()還有3個同義詞,效果跟NOW()一樣,而且都有2種形式寫法:

LOCALTIME或LOCALTIME()

LOCALTIMESTAMP或LOCALTIMESTAMP()

CURRENT_TIMESTAMP或CURRENT_TIMESTAMP()

MySQL中判斷日期間隔的方法

MySQL中查詢一定時間間隔内的資料的方法比較常用,可以使用TO_DAYS、DATE_SUB等函數來實作

TO_DAYS函數的作用是傳回指定日期從0年開始計算的天數。

DATE_SUB函數的作用是通過指定日期減去指定間隔時間。

1、今天

SELECT * FROM t1 WHERE TO_DAYS(adddate) = TO_DAYS(CURDATE());

2、昨天

SELECT * FROM t1 WHERE TO_DAYS(CURDATE()) - TO_DAYS(adddate) = 1;

3、最近7天

SELECT * FROM t1 WHERE adddate >= DATE_SUB(CURDATE(),INTERVAL 7 DAY);

4、最近30天

SELECT * FROM t1 WHERE adddate >= DATE_SUB(CURDATE(),INTERVAL 30 DAY);

5、上個月

SELECT * FROM t1 WHERE DATE_FORMAT(adddate,'%Y-%m') = DATE_FORMAT(DATE_SUB(curdate(), INTERVAL 1 MONTH),'%Y-%m');

MySQL中group_concat()函數的排序方法

group_concat()函數的參數是可以直接使用order by排序的

SELECT username,GROUP_CONCAT(score ORDER BY score DESC) AS myScore FROM t1 GROUP BY username; 一個列有多個值

MySQL中union和order by一起使用的方法

(1)可以将前面一個order by去掉,改成如下:

SELECT * FROM t1 WHERE username LIKE 'l%'

UNION

SELECT * FROM t1 WHERE username LIKE '%m%' ORDER BY score ASC

該sql的意思就是先union,然後對整個結果集進行order by。

(2)可以通過兩個查詢分别加括号的方式,改成如下

SELECT * FROM

(SELECT * FROM t1 WHERE username LIKE 'l%' ORDER BY score ASC) t3

UNION 

(SELECT * FROM t1 WHERE username LIKE '%m%' ORDER BY score ASC) t4

也就是說,order by不能直接出現在union的子句中,但是可以出現在子句的子句中。

union會過濾掉兩個結果集中重複的行,而union all不會過濾掉重複行。

MySQL存儲過程中declare和set定義變量的差別

declare定義的類似是局部變量,@set定義的類似全局變量

DROP PROCEDURE IF EXISTS temp;

DELIMITER //

CREATE PROCEDURE temp()

BEGIN

    DECLARE a INT DEFAULT 1;

    SET a=a+1;

    SET @b=@b+1;

    SELECT a,@b;

END

//

DELIMITER ;

會發現a的值不改變,而b的值會一直增加。

本文轉自 liqius 51CTO部落格,原文連結:http://blog.51cto.com/szgb17/1915970,如需轉載請自行聯系原作者