MYSQL資料庫函數集合

来源:http://www.cnblogs.com/nana-share/archive/2016/11/15/6066528.html
-Advertisement-
Play Games

一、數學函數 ABS(x) 返回x的絕對值 BIN(x) 返回x的二進位(OCT返回八進位,HEX返回十六進位) CEILING(x) 返回大於x的最小整數值 EXP(x) 返回值e(自然對數的底)的x次方 FLOOR(x) 返回小於x的最大整數值 GREATEST(x1,x2,...,xn)返回集 ...


一、數學函數
ABS(x)   返回x的絕對值

BIN(x)   返回x的二進位(OCT返回八進位,HEX返回十六進位)
CEILING(x)   返回大於x的最小整數值
EXP(x)   返回值e(自然對數的底)的x次方
FLOOR(x)   返回小於x的最大整數值
GREATEST(x1,x2,...,xn)返回集合中最大的值
LEAST(x1,x2,...,xn)      返回集合中最小的值
LN(x)                    返回x的自然對數
LOG(x,y)返回x的以y為底的對數
MOD(x,y)                 返回x/y的模(餘數)
PI()返回pi的值(圓周率)
RAND()返回0到1內的隨機值,可以通過提供一個參數(種子)使RAND()隨機數生成器生成一個指定的值。
ROUND(x,y)返回參數x的四捨五入的有y位小數的值
SIGN(x) 返回代表數字x的符號的值
SQRT(x) 返回一個數的平方根
TRUNCATE(x,y)            返回數字x截短為y位小數的結果

二、聚合函數(常用於GROUP BY從句的SELECT查詢中)
AVG(col)返回指定列的平均值
COUNT(col)返回指定列中非NULL值的個數
MIN(col)返回指定列的最小值
MAX(col)返回指定列的最大值
SUM(col)返回指定列的所有值之和
GROUP_CONCAT(col) 返回由屬於一組的列值連接組合而成的結果

三、字元串函數
ASCII(char)返回字元的ASCII碼值
BIT_LENGTH(str)返回字元串的比特長度
CONCAT(s1,s2...,sn)將s1,s2...,sn連接成字元串
CONCAT_WS(sep,s1,s2...,sn)將s1,s2...,sn連接成字元串,並用sep字元間隔
INSERT(str,x,y,instr) 將字元串str從第x位置開始,y個字元長的子串替換為字元串instr,返回結果
FIND_IN_SET(str,list)分析逗號分隔的list列表,如果發現str,返回str在list中的位置
LCASE(str)或LOWER(str) 返回將字元串str中所有字元改變為小寫後的結果
LEFT(str,x)返回字元串str中最左邊的x個字元
LENGTH(s)返回字元串str中的字元數
LTRIM(str) 從字元串str中切掉開頭的空格
POSITION(substr,str) 返回子串substr在字元串str中第一次出現的位置
QUOTE(str) 用反斜杠轉義str中的單引號
REPEAT(str,srchstr,rplcstr)返回字元串str重覆x次的結果
REVERSE(str) 返回顛倒字元串str的結果
RIGHT(str,x) 返回字元串str中最右邊的x個字元
RTRIM(str) 返回字元串str尾部的空格
STRCMP(s1,s2)比較字元串s1和s2
TRIM(str)去除字元串首部和尾部的所有空格
UCASE(str)或UPPER(str) 返回將字元串str中所有字元轉變為大寫後的結果

四、日期和時間函數
CURDATE()或CURRENT_DATE() 返回當前的日期
CURTIME()或CURRENT_TIME() 返回當前的時間
DATE_ADD(date,INTERVAL int keyword)返回日期date加上間隔時間int的結果(int必須按照關鍵字進行格式化),如:SELECTDATE_ADD(CURRENT_DATE,INTERVAL 6 MONTH);
DATE_FORMAT(date,fmt)  依照指定的fmt格式格式化日期date值
DATE_SUB(date,INTERVAL int keyword)返回日期date加上間隔時間int的結果(int必須按照關鍵字進行格式化),如:SELECTDATE_SUB(CURRENT_DATE,INTERVAL 6 MONTH);
DAYOFWEEK(date)   返回date所代表的一星期中的第幾天(1~7)
DAYOFMONTH(date)  返回date是一個月的第幾天(1~31)
DAYOFYEAR(date)   返回date是一年的第幾天(1~366)
DAYNAME(date)   返回date的星期名,如:SELECT DAYNAME(CURRENT_DATE);
FROM_UNIXTIME(ts,fmt)  根據指定的fmt格式,格式化UNIX時間戳ts
HOUR(time)   返回time的小時值(0~23)
MINUTE(time)   返回time的分鐘值(0~59)
MONTH(date)   返回date的月份值(1~12)
MONTHNAME(date)   返回date的月份名,如:SELECT MONTHNAME(CURRENT_DATE);
NOW()    返回當前的日期和時間
QUARTER(date)   返回date在一年中的季度(1~4),如SELECT QUARTER(CURRENT_DATE);
WEEK(date)   返回日期date為一年中第幾周(0~53)
YEAR(date)   返回日期date的年份(1000~9999)
一些示例:
獲取當前系統時間:SELECT FROM_UNIXTIME(UNIX_TIMESTAMP());
SELECT EXTRACT(YEAR_MONTH FROM CURRENT_DATE);
SELECT EXTRACT(DAY_SECOND FROM CURRENT_DATE);
SELECT EXTRACT(HOUR_MINUTE FROM CURRENT_DATE);
返回兩個日期值之間的差值(月數):SELECT PERIOD_DIFF(200302,199802);
在Mysql中計算年齡:
SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)),'%Y')+0 AS age FROM employee;
這樣,如果Brithday是未來的年月日的話,計算結果為0。
下麵的SQL語句計算員工的絕對年齡,即當Birthday是未來的日期時,將得到負值。
SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(birthday, '%Y') -(DATE_FORMAT(NOW(), '00-%m-%d') <DATE_FORMAT(birthday, '00-%m-%d')) AS age from employee

五、加密函數
AES_ENCRYPT(str,key)  返回用密鑰key對字元串str利用高級加密標準演算法加密後的結果,調用AES_ENCRYPT的結果是一個二進位字元串,以BLOB類型存儲
AES_DECRYPT(str,key)  返回用密鑰key對字元串str利用高級加密標準演算法解密後的結果
DECODE(str,key)   使用key作為密鑰解密加密字元串str
ENCRYPT(str,salt)   使用UNIXcrypt()函數,用關鍵詞salt(一個可以惟一確定口令的字元串,就像鑰匙一樣)加密字元串str
ENCODE(str,key)   使用key作為密鑰加密字元串str,調用ENCODE()的結果是一個二進位字元串,它以BLOB類型存儲
MD5()    計算字元串str的MD5校驗和
PASSWORD(str)   返回字元串str的加密版本,這個加密過程是不可逆轉的,和UNIX密碼加密過程使用不同的演算法。
SHA()    計算字元串str的安全散列演算法(SHA)校驗和
示例:
SELECT ENCRYPT('root','salt');
SELECT ENCODE('xufeng','key');
SELECT DECODE(ENCODE('xufeng','key'),'key');#加解密放在一起
SELECT AES_ENCRYPT('root','key');
SELECT AES_DECRYPT(AES_ENCRYPT('root','key'),'key');
SELECT MD5('123456');
SELECT SHA('123456');

六、控制流函數
MySQL有4個函數是用來進行條件操作的,這些函數可以實現SQL的條件邏輯,允許開發者將一些應用程式業務邏輯轉換到資料庫後臺。
MySQL控制流函數:
CASE WHEN[test1] THEN [result1]...ELSE [default] END如果testN是真,則返回resultN,否則返回default
CASE [test] WHEN[val1] THEN [result]...ELSE [default]END  如果test和valN相等,則返回resultN,否則返回default
IF(test,t,f)   如果test是真,返回t;否則返回f
IFNULL(arg1,arg2) 如果arg1不是空,返回arg1,否則返回arg2
NULLIF(arg1,arg2) 如果arg1=arg2返回NULL;否則返回arg1
這些函數的第一個是IFNULL(),它有兩個參數,並且對第一個參數進行判斷。如果第一個參數不是NULL,函數就會向調用者返回第一個參數;如果是NULL,將返回第二個參數。
如:SELECT IFNULL(1,2), IFNULL(NULL,10),IFNULL(4*NULL,'false');
NULLIF()函數將會檢驗提供的兩個參數是否相等,如果相等,則返回NULL,如果不相等,就返回第一個參數。
如:SELECT NULLIF(1,1),NULLIF('A','B'),NULLIF(2+3,4+1);
和許多腳本語言提供的IF()函數一樣,MySQL的IF()函數也可以建立一個簡單的條件測試,這個函數有三個參數,第一個是要被判斷的表達式,如果表達式為真,IF()將會返回第二個參數,如果為假,IF()將會返回第三個參數。
如:SELECTIF(1<10,2,3),IF(56>100,'true','false');
IF()函數在只有兩種可能結果時才適合使用。然而,在現實世界中,我們可能發現在條件測試中會需要多個分支。在這種情況下,MySQL提供了CASE函數,它和PHP及Perl語言的switch-case條件常式一樣。
CASE函數的格式有些複雜,通常如下所示:
CASE [expression to be evaluated]
WHEN [val 1] THEN [result 1]
WHEN [val 2] THEN [result 2]
WHEN [val 3] THEN [result 3]
......
WHEN [val n] THEN [result n]
ELSE [default result]
END
這裡,第一個參數是要被判斷的值或表達式,接下來的是一系列的WHEN-THEN塊,每一塊的第一個參數指定要比較的值,如果為真,就返回結果。所有的 WHEN-THEN塊將以ELSE塊結束,當END結束了所有外部的CASE塊時,如果前面的每一個塊都不匹配就會返回ELSE塊指定的預設結果。如果沒 有指定ELSE塊,而且所有的WHEN-THEN比較都不是真,MySQL將會返回NULL。
CASE函數還有另外一種句法,有時使用起來非常方便,如下:
CASE
WHEN [conditional test 1] THEN [result 1]
WHEN [conditional test 2] THEN [result 2]
ELSE [default result]
END
這種條件下,返回的結果取決於相應的條件測試是否為真。
示例:
mysql>SELECT CASE 'green'
     WHEN 'red' THEN 'stop'
     WHEN 'green' THEN 'go' END;
SELECT CASE 9 WHEN 1 THEN 'a' WHEN 2 THEN 'b' ELSE 'N/A' END;
SELECT CASE WHEN (2+2)=4 THEN 'OK' WHEN(2+2)<>4 THEN 'not OK' END ASSTATUS;
SELECT Name,IF((IsActive = 1),'已激活','未激活') AS RESULT FROMUserLoginInfo;
SELECT fname,lname,(math+sci+lit) AS total,
CASE WHEN (math+sci+lit) < 50 THEN 'D'
WHEN (math+sci+lit) BETWEEN 50 AND 150 THEN 'C'
WHEN (math+sci+lit) BETWEEN 151 AND 250 THEN 'B'
ELSE 'A' END
AS grade FROM marks;
SELECT IF(ENCRYPT('sue','ts')=upass,'allow','deny') AS LoginResultFROM users WHERE uname = 'sue';#一個登陸驗證

七、格式化函數
DATE_FORMAT(date,fmt)  依照字元串fmt格式化日期date值
FORMAT(x,y)   把x格式化為以逗號隔開的數字序列,y是結果的小數位數
INET_ATON(ip)   返回IP地址的數字表示
INET_NTOA(num)   返回數字所代表的IP地址
TIME_FORMAT(time,fmt)  依照字元串fmt格式化時間time值
其中最簡單的是FORMAT()函數,它可以把大的數值格式化為以逗號間隔的易讀的序列。
示例:
SELECT FORMAT(34234.34323432,3);
SELECT DATE_FORMAT(NOW(),'%W,%D %M %Y %r');
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d');
SELECT DATE_FORMAT(19990330,'%Y-%m-%d');
SELECT DATE_FORMAT(NOW(),'%h:%i %p');
SELECT INET_ATON('10.122.89.47');
SELECT INET_NTOA(175790383);

八、類型轉化函數
為了進行數據類型轉化,MySQL提供了CAST()函數,它可以把一個值轉化為指定的數據類型。類型有:BINARY,CHAR,DATE,TIME,DATETIME,SIGNED,UNSIGNED
示例:
SELECT CAST(NOW() AS SIGNED INTEGER),CURDATE()+0;
SELECT 'f'=BINARY 'F','f'=CAST('F' AS BINARY);

九、系統信息函數
DATABASE()   返回當前資料庫名
BENCHMARK(count,expr)  將表達式expr重覆運行count次
CONNECTION_ID()   返回當前客戶的連接ID
FOUND_ROWS()   返回最後一個SELECT查詢進行檢索的總行數
USER()或SYSTEM_USER()  返回當前登陸用戶名
VERSION()   返回MySQL伺服器的版本
示例:
SELECT DATABASE(),VERSION(),USER();
SELECTBENCHMARK(9999999,LOG(RAND()*PI()));#該例中,MySQL計算LOG(RAND()*PI())表達式9999999次。   文章轉自http://blog.csdn.net/sugang_ximi/article/details/6664748 未經整理    
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 現在舉例幾個“增查改刪”的語句 ...
  • 【數據說明】 全國藥房藥店信息名錄 將近 6萬 條 【更新時間】 2016年10月 【欄位說明】 省份,地區,藥店名稱,經營範圍,聯繫人,聯繫電話,地址,郵編 【數據樣例】 【聯繫我們】 聯繫電話:13604049781(不支持簡訊) QQ客服:4522140 官方網站:http://www.ssr ...
  • 2015年更新全國總數據量將近1500萬條 【數據說明】 大眾點評網商戶信息數據 1500萬 條 【更新時間】 2015年10月 【欄位說明】 商戶ID,是否加V,是否停業,商戶名稱,別名,省,市,城市拼音,城市ID,區,一級分類,一級分類ID,二級分類,二級分類ID,地址,商圈,聯繫電話,營業時間 ...
  • 【數據說明】 全國銀行名錄聯號資料庫 10萬 條 【更新時間】 2014年10月 【欄位說明】 銀行聯號代碼,銀行名稱,地址,電話 【數據樣例】 【聯繫我們】 聯繫電話:13604049781(不支持簡訊) QQ客服:4522140 官方網站:http://www.ssrydata.com 官方微博 ...
  • 全國官方省市區街道詳細郵編 【數據說明】 全國省市區縣街道郵編編碼數據 178 萬條 【更新時間】 2014年12月 【欄位說明】 ID,郵編,省份,城市,區縣,地址,省份城市區縣 【數據樣例】 【聯繫我們】 聯繫電話:13604049781(不支持簡訊) QQ客服:4522140 官方網站:htt ...
  • 1. 新建資料庫 可以在對應目錄下右鍵新建資料庫,也可以用程式添加: 先打開程式編輯對話框“New Query” 2. 添加表格 可以在對應目錄下右鍵新建表格,也可以用程式添加: 第一步: 選擇要執行的程式代碼 第二步:選擇資料庫 第三步: 執行 然後“F5”刷新就可以看到新建的表格 ...
  • 1. 新建的資料庫會產生兩個文件(數據文件.mdf 和日誌文件.ldf) 2. 編輯表格和為表格錄入數據 “Design”為設計表格,“Edit Top 200 Rows”就可以為表格錄入數據 3. 表設計:主鍵,自增、數據類型,保存 a. 設置主鍵,唯一 b. 自增 c. 數據類型 bit: 代表 ...
  • 數據備份與恢復 Example:(192.167.8.13 InfluxDB:DeviceHistory備份到192.167.8.52,然後恢復到該伺服器上) steps: login 192.167.8.52 1、influxd backup -host 192.167.8.13:8088 ./i ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...