MySQL 常用函式 使用技巧

2022-06-06 19:03:13 字數 3994 閱讀 8078

一、常用函式

1. if

a. 語法:if(expr1, expr2, expr3) ——>如果表示式expr1成立(真),返回結果expr2,否則返回結果expr3;

2. ifnull

a. 語法:ifnull(expr1, expr2) ——>如果expr1的值不為null,則返回expr1,否則返回expr2;

3. case when

a. 簡單函式:case [col_name] when [value1] then [result1] … else [default] end,應用場景:列舉這個字段所有可能的值

b. 搜尋函式:case when [expr] then [result1] … else [default] end,應用場景:

c. 舉例:

/**

* 檢視場所資訊狀態

* @return

*/@query(value = "select case l.status when 1 then '審核中' when 2 then '審核不通過' when 3 then '審核通過' when 4 then '審核同步中' end as status, t2.op_obj, l.id from operate_log l, (select op_obj, max(operate_log_id) as id from operate_log_detail where op_obj in :ids group by op_obj) t2 where l.id = t2.id", nativequery = true)

listfindalloperateinfo(@param("ids") listids);

4. substring_index

a. 語法:substring_index (str, delimiter, number)  ——> 返回從字串str的第number個出現的分隔符delimiter之後的子串;

5. concat

a. 語法:concat(str1, str2, ...) ——> 將多個字串連線成乙個字串;

b. 注意:如果有任何乙個引數為null,則返回值為null;

c. 舉例:在乙個搜尋框中模糊匹配name和remark兩個字段資料

6. group_concat

a. 語法:group_concat([distinct] 要連線的字段 [order by 排序字段 asc/desc] [separator '分割符']) ——> distinct可以排除重複值,order by對結果的值進行排序,separator是乙個字串值,預設為乙個逗號,作用是將group by產生的同乙個分組中的值連線起來,返回乙個字串結果;

b. 舉例:

5和6的例項可參考:

7. max 

a. 語法:max(expr):返回欄位expr中最大值,是針對數字型別,若是字串型別,請使用max(expr + 0),因為字串型別大小是先比較首字元,然後依次往後比較;

b. 舉例:value欄位是text型別

on hpr.id = hp.property_ref where hp.host_id = '1_1.12.109.17'; // 值是5

select max(case when hpr.`name` = 'hostgroupid' then hp.value + 0 end) as hostgroupid from host_pro hp left join host_pro_ref hpr 

on hpr.id = hp.property_ref where hp.host_id = '1_1.12.109.17'; // 值是48

8. date_format

a. 語法:date_format(date, format) ——> 用於以不同的格式顯示日期時間資料

b. format格式:可參考

c. 舉例:

select date_format(created_time, '%y%m') as accessyearmonth, date_format(created_time, '%e') as accessday date_format(created_time, '%k') as accesshour, 

date_format(created_time, '%y-%m-%d %h') as `time` from access_log group by `time` order by `time`

可參考:mysql 函式大全

二、使用技巧

1. 乙個搜尋框的值模糊匹配上多個字段

a. select * from 表名 where concat(ifnull('欄位1', ''), ifnull( '欄位2', ''),  ...) like concat('%', 關鍵字, '%');

b. ifnull函式的作用是為了解決有任何乙個字段引數為null,則該行返回值為null的情況。

2. 查詢資料行轉列

a. 利用max(case ... when ... then ... else ... end) as ...來實現,注意max函式若查詢最大值需要給字段加0;

b. 轉換前

c. 轉換後

3.  運算子優先順序

a. and和or聯合使用帶來的問題,需要用括號解決;

b. 舉例:select * from user where a = 1 and b = 2 or c = 3 區別與 select * from user where a = 1 and (b = 2 or c = 3);

c. 運算子優先順序。

4. in關鍵字查詢匹配多個字段:select * from user where (id, name) in ((1, '張三'), (2, '李四'));

5. 將一張表的資料插入另外一張表

a. 如果兩張表的字段一致:insert into table1 select * from table2;

b. 如果只希望匯入指定字段:insert into table1 (name1, age1) select name2, age2 from table2。

mysql 常用函式使用

and year t2.checkout time year 函式接收date型別,返回乙個年份。還有month 函式,乙個用法 mysql select year 2018 01 01 year 2018 01 01 2018 1 row in set大於。小於的,需要轉義。and t2.age ...

C vector常用函式及使用技巧

作用 它能夠像容器一樣存放各種型別的物件,簡單地說,vector是乙個能夠存放任意型別的動態陣列,能夠增加和壓縮資料。vector在c 標準模板庫中的部分內容,它是乙個多功能的,能夠操作多種資料結構和演算法的模板類和函式庫。尾部插入數字 vec.push back a 使用下標訪問元素,cout 使...

MySql字串函式使用技巧

1 從左開始擷取字串 left str,length 說明 left 被擷取字段,擷取長度 例 select left content,200 as abstract from my content t 2 從右開始擷取字串 right str,length 說明 right 被擷取字段,擷取長度 ...