mysql學習【第4篇】:MySQL函數

来源:https://www.cnblogs.com/hellokuangshen/archive/2019/01/13/10261657.html
-Advertisement-
Play Games

狂神聲明 : 文章均為自己的學習筆記 , 轉載一定註明出處 ; 編輯不易 , 防君子不防小人~共勉 ! mysql學習【第4篇】:MySQL函數 官方文檔 : 官方文檔 常用函數 分類: 數學函數 , 字元串函數 , 日期和時間函數 , 系統信息函數 聚合函數 mysql之自定義函數 什麼是函數: ...


狂神聲明 : 文章均為自己的學習筆記 , 轉載一定註明出處 ; 編輯不易 , 防君子不防小人~共勉 ! 

mysql學習【第4篇】:MySQL函數

官方文檔 : 官方文檔

常用函數

分類: 數學函數 , 字元串函數 , 日期和時間函數 , 系統信息函數

# 數學函數 (這裡只列出一些常用的)

SELECT ABS(-8);  /*絕對值*/

SELECT CEILING(9.4);  /*向上取整*/

SELECT FLOOR(9.4);  /*向下取整*/

SELECT RAND();  /*隨機數,返回一個0-1之間的隨機數*/

SELECT SIGN(0); /*符號函數: 負數返回-1,正數返回1,0返回0*/


#字元串函數

SELECT CHAR_LENGTH('狂神說堅持就能成功'); /*返回字元串包含的字元數*/

SELECT CONCAT('','','程式');  /*合併字元串,參數可以有多個*/

SELECT INSERT('我愛編程helloworld',1,2,'超級熱愛');  /*替換字元串,從某個位置開始替換某個長度*/

SELECT LOWER('KuangShen'); /*小寫*/

SELECT UPPER('KuangShen'); /*大寫*/

SELECT LEFT('hello,world',5);  /*從左邊截取*/

SELECT RIGHT('hello,world',5);  /*從右邊截取*/

SELECT REPLACE('狂神說堅持就能成功','堅持','努力');  /*替換字元串*/

SELECT SUBSTR('狂神說堅持就能成功',4,6); /*截取字元串,開始和長度*/

SELECT REVERSE('狂神說堅持就能成功'); /*反轉*/


#日期和時間函數

SELECT CURRENT_DATE();   /*獲取當前日期*/
SELECT CURDATE();   /*獲取當前日期*/

SELECT NOW();   /*獲取當前日期和時間*/
SELECT LOCALTIME();   /*獲取當前日期和時間*/
SELECT SYSDATE();   /*獲取當前日期和時間*/

/*獲取年月日,時分秒*/
SELECT YEAR(NOW());
SELECT MONTH(NOW());
SELECT DAY(NOW());
SELECT HOUR(NOW());
SELECT MINUTE(NOW());
SELECT SECOND(NOW());


#系統信息函數
SELECT VERSION();  /*版本*/
SELECT USER();  /*用戶*/


# 查詢姓李的同學,改成立
SELECT REPLACE(studentname,'','') AS 新名字
FROM student WHERE studentname LIKE '李%';

 聚合函數

#聚合函數

/*COUNT:非空的*/
SELECT COUNT(studentname) FROM student;
SELECT COUNT(*) FROM student;
SELECT COUNT(1) FROM student;  /*推薦*/


SELECT SUM(StudentResult) AS 總和 FROM result;
SELECT AVG(StudentResult) AS 平均分 FROM result;
SELECT MAX(StudentResult) AS 最高分 FROM result;
SELECT MIN(StudentResult) AS 最低分 FROM result;


# 查詢不同課程的平均分,最高分,最低分
# 前提:根據不同的課程進行分組

SELECT subjectname,AVG(studentresult) AS 平均分,MAX(StudentResult) AS 最高分,MIN(StudentResult) AS 最低分
FROM result AS r
INNER JOIN `subject` AS s
ON r.subjectno = s.subjectno
GROUP BY r.subjectno
HAVING 平均分>80;

/*
where寫在group by前面.
要是放在分組後面的篩選
要使用HAVING..
*/

 

 mysql之自定義函數

什麼是函數:

    函數存儲著一系列SQL語句,調用函數就是一次性執行這些語句。所以函數可以降低語句重覆。
    但註意的是函數註重返回值,不註重執行過程,所以一些語句無法執行。所以函數並不是單純的SQL語句集合。

    函數與存儲過程的區別:函數只會返回一個值,不允許返回一個結果集。函數強調返回值,所以函數不允許返回多個值的情況,即使是查詢語句。

函數的創建:

/*語法*/
create function 函數名([參數列表]) returns 數據類型
begin
 sql語句;
 return 值;
end;

/*參數列表的格式是:  變數名 數據類型*/

-- 最簡單的僅有一條sql的函數
create function myselect2() returns int return 666;
select myselect2(); -- 調用函數

--
create function myselect3() returns int
begin 
    declare c int;
    select id from class where cname="python" into c;
    return c;
end;
select myselect3();
-- 帶傳參的函數
create function myselect5(name varchar(15)) returns int
begin 
    declare c int;
    select id from class where cname=name into c;
    return c;
end;
select myselect5("python");

補充:

    還可以有一些特別的選項,特別的選項寫在RETURN 之後,BEGIN之前,如:
        COMMENT:一個關於函數的描述
         還有一些比如SQL SECURITY等選項,有興趣可以自行百度。這裡不講解,僅一提有此知識點。

SQL編程

/* SQL編程 */ ------------------

--// 局部變數 ----------
-- 變數聲明
    declare var_name[,...] type [default value] 
    這個語句被用來聲明局部變數。要給變數提供一個預設值,請包含一個default子句。值可以被指定為一個表達式,不需要為一個常數。如果沒有default子句,初始值為null。 

-- 賦值
    使用 setselect into 語句為變數賦值。

    - 註意:在函數內是可以使用全局變數(用戶自定義的變數)


--// 全局變數 ----------
-- 定義、賦值
set 語句可以定義併為變數賦值。
set @var = value;
也可以使用select into語句為變數初始化並賦值。這樣要求select語句只能返回一行,但是可以是多個欄位,就意味著同時為多個變數進行賦值,變數的數量需要與查詢的列數一致。
還可以把賦值語句看作一個表達式,通過select執行完成。此時為了避免=被當作關係運算符看待,使用:=代替。(set語句可以使用= 和 :=)。
select @var:=20;
select @v1:=id, @v2=name from t1 limit 1;
select * from tbl_name where @var:=30;

select into 可以將表中查詢獲得的數據賦給變數。
    -| select max(height) into @max_height from tb;

-- 自定義變數名
為了避免select語句中,用戶自定義的變數與系統標識符(通常是欄位名)衝突,用戶自定義變數在變數名前使用@作為開始符號@var=10;

    - 變數被定義後,在整個會話周期都有效(登錄到退出)


--// 控制結構 ----------
-- if語句
if search_condition then 
    statement_list    
[elseif search_condition then
    statement_list]
...
[else
    statement_list]
end if;

-- case語句
CASE value WHEN [compare-value] THEN result
[WHEN [compare-value] THEN result ...]
[ELSE result]
END


-- while迴圈
[begin_label:] while search_condition do
    statement_list
end while [end_label];

- 如果需要在迴圈內提前終止 while迴圈,則需要使用標簽;標簽需要成對出現。

    -- 退出迴圈
        退出整個迴圈 leave
        退出當前迴圈 iterate
        通過退出的標簽決定退出哪個迴圈


--// 內置函數 ----------
-- 數值函數
abs(x)            -- 絕對值 abs(-10.9) = 10
format(x, d)    -- 格式化千分位數值 format(1234567.456, 2) = 1,234,567.46
ceil(x)            -- 向上取整 ceil(10.1) = 11
floor(x)        -- 向下取整 floor (10.1) = 10
round(x)        -- 四捨五入去整
mod(m, n)        -- m%n m mod n 求餘 10%3=1
pi()            -- 獲得圓周率
pow(m, n)        -- m^n
sqrt(x)            -- 算術平方根
rand()            -- 隨機數
truncate(x, d)    -- 截取d位小數

-- 時間日期函數
now(), current_timestamp();     -- 當前日期時間
current_date();                    -- 當前日期
current_time();                    -- 當前時間
date('yyyy-mm-dd hh:ii:ss');    -- 獲取日期部分
time('yyyy-mm-dd hh:ii:ss');    -- 獲取時間部分
date_format('yyyy-mm-dd hh:ii:ss', '%d %y %a %d %m %b %j');    -- 格式化時間
unix_timestamp();                -- 獲得unix時間戳
from_unixtime();                -- 從時間戳獲得時間

-- 字元串函數
length(string)            -- string長度,位元組
char_length(string)        -- string的字元個數
substring(str, position [,length])        -- 從str的position開始,取length個字元
replace(str ,search_str ,replace_str)    -- 在str中用replace_str替換search_str
instr(string ,substring)    -- 返回substring首次在string中出現的位置
concat(string [,...])    -- 連接字串
charset(str)            -- 返回字串字元集
lcase(string)            -- 轉換成小寫
left(string, length)    -- 從string2中的左邊起取length個字元
load_file(file_name)    -- 從文件讀取內容
locate(substring, string [,start_position])    -- 同instr,但可指定開始位置
lpad(string, length, pad)    -- 重覆用pad加在string開頭,直到字串長度為length
ltrim(string)            -- 去除前端空格
repeat(string, count)    -- 重覆count次
rpad(string, length, pad)    --在str後用pad補充,直到長度為length
rtrim(string)            -- 去除後端空格
strcmp(string1 ,string2)    -- 逐字元比較兩字串大小

-- 流程函數
case when [condition] then result [when [condition] then result ...] [else result] end   多分支
if(expr1,expr2,expr3)  雙分支。

-- 聚合函數
count()
sum();
max();
min();
avg();
group_concat()

-- 其他常用函數
md5();
default();


--// 存儲函數,自定義函數 ----------
-- 新建
    CREATE FUNCTION function_name (參數列表) RETURNS 返回值類型
        函數體

    - 函數名,應該合法的標識符,並且不應該與已有的關鍵字衝突。
    - 一個函數應該屬於某個資料庫,可以使用db_name.funciton_name的形式執行當前函數所屬資料庫,否則為當前資料庫。
    - 參數部分,由"參數名"和"參數類型"組成。多個參數用逗號隔開。
    - 函數體由多條可用的mysql語句,流程式控制制,變數聲明等語句構成。
    - 多條語句應該使用 begin...end 語句塊包含。
    - 一定要有 return 返回值語句。

-- 刪除
    DROP FUNCTION [IF EXISTS] function_name;

-- 查看
    SHOW FUNCTION STATUS LIKE 'partten'
    SHOW CREATE FUNCTION function_name;

-- 修改
    ALTER FUNCTION function_name 函數選項


--// 存儲過程,自定義功能 ----------
-- 定義
存儲存儲過程 是一段代碼(過程),存儲在資料庫中的sql組成。
一個存儲過程通常用於完成一段業務邏輯,例如報名,交班費,訂單入庫等。
而一個函數通常專註與某個功能,視為其他程式服務的,需要在其他語句中調用函數才可以,而存儲過程不能被其他調用,是自己執行 通過call執行。

-- 創建
CREATE PROCEDURE sp_name (參數列表)
    過程體

參數列表:不同於函數的參數列表,需要指明參數類型
IN,表示輸入型
OUT,表示輸出型
INOUT,表示混合型

註意,沒有返回值。


/* 存儲過程 */ ------------------
存儲過程是一段可執行性代碼的集合。相比函數,更偏向於業務邏輯。
調用:CALL 過程名
-- 註意
- 沒有返回值。
- 只能單獨調用,不可夾雜在其他語句中

-- 參數
IN|OUT|INOUT 參數名 數據類型
IN        輸入:在調用過程中,將數據輸入到過程體內部的參數
OUT        輸出:在調用過程中,將過程體處理完的結果返回到客戶端
INOUT    輸入輸出:既可輸入,也可輸出

-- 語法
CREATE PROCEDURE 過程名 (參數列表)
BEGIN
    過程體
END

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本篇文章主要是針對fuse-2.9.9 Example 部分 給出的源碼,結合官方文檔,以及網上的資料給出註釋,希望能給正在學習的你們一點幫助。 Hello.c 保持更新,轉載請註明出處。如果你有什麼問題,歡迎在留言區進行留言交流。https://www.cnblogs.com/xuyaowen/p ...
  • 一 基礎環境 1.1 IP規劃 OS:CentOS 6.8 64位 節點類型 IP規劃 主機名 類型 主 Director Server eth0:172.24.8.10 DR1 公共IP eth1:192.168.56.100 心跳 私有IP eth0:0:172.24.8.100 無 虛擬IP ...
  • 在進行使用fuse 2.9寫程式的時候,遇到了pkg-config 命令和 .pc 文件。本篇博客就具體說明一下pkg-config 命令是什麼? 我們首先看一下: pkg-config 簡介: 大家應該都知道用第三方庫,就少不了要使用到第三方的頭文件和庫文件。我們在編譯、鏈接的時候,必須要指定這些 ...
  • 環境: HelperA64開發板 Linux3.10內核 時間:2019.01.12 目標:修改開機bootlogo的BUG 問題: 1.24bit深度的bootlogo.bmp圖片會導致Qt5有色差,32位的圖片沒有色差。 2.將開機bootlogo圖片修改為32點陣圖片只有部分圖片能夠點亮屏就顯示 ...
  • 前言 開心一刻 上語文課,不小心睡著了,坐在邊上的同桌突然叫醒了我,並小聲說道:“讀課文第三段”。我立馬起身大聲讀了起來。正在黑板寫字的老師嚇了一跳,老師鬱悶的看著我,問道:“同學有什麼問題嗎?”,我貌似知道了什麼,蛋定的說了一句:“這段寫的真好!我給大伙念念!”,老師還較真了:“你說說看,好在哪裡 ...
  • 相關文章 五分鐘輕鬆瞭解Hbase列式存儲 Hbase給初學者的“下馬威” Hbase王國游記之:Hbase客戶端API初體驗 👉§團結力量大 原始社會,由若幹血緣相近的宗族、氏族結合起來集體生活,這就是部落。最高首領就是酋長,此外還可能會有軍事首領,他們一起繁衍生息。 到了原始社會末期,頻繁戰爭 ...
  • 在產品環境中,往往存在著大量的表連接情景,不管是inner join、outer join、cross join和full join(邏輯連接符號),在內部都會轉化為物理連接(Physical Join),SQL Server共有三種物理連接:Nested Loop(嵌套迴圈),Merge Join ...
  • 原創作品,轉載請註明出處:https://www.cnblogs.com/sunshine5683/p/10263246.html 接下來的n多天,將進入oracle認證系列的學習總結中,本該從asm開始總結,但由於在日常工作中使用最廣的還是oracle的安全性,所以就先從這點入手,這也是資料庫最重 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...