1. 程式人生 > >mysql資料庫學習09-函式

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的結果