mysql資料庫學習09-函式
1、字串處理函式:
char_length('a中'); -- 返回字元長度
length('a中'); -- 返回位元組長度
concat('abc',' ','def'); --返回括號內字元連結後的字元,返回:abc def
concat_ws(';', 'aedfad','sdfadfd','sfadfs'); -- 第一個引數為後面字串連結時的分隔符
instr('asdfghjkl', 'fgh'); -- 子串的起始位置。返回後面字串在前面字串中查詢到的位置。返回0,則表示沒有找到
locate('abc', 'asdasabcdfdfd', 5); --作用和instr一樣,就是引數顛倒一下,而且最後一個引數可以指定開始查詢的位置
insert(‘dsfadfsdfasdfsfesf’,2,11,'-----'); -- 從第2個位置開始,往後的11個字元,使用'-----'進行替換
lower('ADDEsdfsf'); -- 全部大寫變小寫
upper('dsfdfaDD'); -- 全部小寫變大寫
left('DFDFDGfrr', 3); --取左側3個字元
right('DFDFDGfrr', 3); --取右側3個字元
lpad('abc',8,'*'); -- 在左邊使用*補足8位字元
rpad('abc',8,'*'); -- 在右邊使用*補足8位字元
trim(' dfad dafdf ') -- 去除兩端空白字元
substring('sfsdfadg',4,7); -- 取從第4個位置開始的7個字元,如果不設定最後一個引數,則表示取第4個位置開始的後面所有字元
repeat('adfadfadf',3) -- 第一個引數的字串,重複連結3遍
REPLACE('Hello MySql','My','Your') - 子串替換
REVERSE('Hello') - 翻轉字串
SPACE(10) - 返回10個空格
2、數字處理函式:
floor(3.94) - 舍掉小數,向下取整
ceil(3.94) - 舍掉小數,向上取整
format(391.536, 2) - 數字格式化為字串,###,###.###,四捨五入,第二個引數為小數位數
round(673.4974) - 四捨五入
round(673.4974, 2) - 四捨五入到小數點後兩位
round(673.4974, -2) - 四捨五入到百
TRUNCATE(234,31, 1) - 捨去至小數點後1位,是直接捨棄,不取上或者取下
3、日期處理函式
NOW() 返回當前的日期和時間
CURDATE() 返回當前的日期
CURTIME() 返回當前的時間
DATE(時間) 提取日期或日期/時間表達式的日期部分
TIME(時間) 提取日期或日期/時間表達式的時間部分
EXTRACT(欄位 From 日期) 返回日期/時間按的單獨部分
欄位的合法值:
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH
DATE_ADD(日期, INTERVAL 數量 欄位) 給日期新增指定的時間間隔
欄位的合法值同上
DATE_SUB(日期, INTERVAL 數量 欄位) 從日期減去指定的時間間隔
DATEDIFF(日期1, 日期2) 返回兩個日期之間的天數
DATE_FORMAT(日期, 格式) 用不同的格式顯示日期/時間
格式字元: %Y-%m-%d %H:%i:%s
%d/%m/%Y
%Y年%m月%d日
%a 縮寫星期名
%b 縮寫月名
%c 月,數值
%D 帶有英文字首的月中的天
%d 月的天,數值(00-31)
%e 月的天,數值(0-31)
%f 微秒
%H 小時 (00-23)
%h 小時 (01-12)
%I 小時 (01-12)
%i 分鐘,數值(00-59)
%j 年的天 (001-366)
%k 小時 (0-23)
%l 小時 (1-12)
%M 月名
%m 月,數值(00-12)
%p AM 或 PM
%r 時間,12-小時(hh:mm:ss AM 或 PM)
%S 秒(00-59)
%s 秒(00-59)
%T 時間, 24-小時 (hh:mm:ss)
%U 周 (00-53) 星期日是一週的第一天
%u 周 (00-53) 星期一是一週的第一天
%V 周 (01-53) 星期日是一週的第一天,與 %X 使用
%v 周 (01-53) 星期一是一週的第一天,與 %x 使用
%W 星期名
%w 周的天 (0=星期日, 6=星期六)
%X 年,其中的星期日是周的第一天,4 位,與 %V 使用
%x 年,其中的星期一是周的第一天,4 位,與 %v 使用
%Y 年,4 位
%y 年,2 位
LAST_DAY(日期) - 返回當月最後一天
4、NULL 相關
IFNULL(資料1,資料2) - 資料1是null返回資料2;不是null返回資料1
coalesce(資料1,資料2,......) - 返回從左向右第一個不是null的資料
5、加密
md5('dsfdfsd') -- 對明文進行加密,都是不可逆的加密方式
sha(asdfgh'') -- 對明文進行加密,都是不可逆的加密方式
5、多行函式
=============================================
* 多行資料交給函式處理,產生一個計算結果
count() 計數,數量,會忽略null值的行
*)計算行select count(1) form tb_test;
max() 最大值
min() 自小值
avg() 平均,會忽略null值的行
sum() 求合
* 不能直接與普通欄位一起查詢
group by:按照分組進行查詢, 後面沒有跟的欄位,不能出現在select後面
*)只能用在多行查詢後面使用
例子:select department_id, count(1) from employees group by department_id; --按照department_id進行分組統計數目
having子句:
*)多行函式分組計算,對多行函式結果進行過濾,不能用where,而使用having來過濾,前面必須有group by
例如:select department_id, count(1) c from employees group by department_id having c=1; -- -按照department_id進行分組統計數目為1的結果