程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL心得6--MySQL語言結構--函數

MySQL心得6--MySQL語言結構--函數

編輯:MySQL綜合教程

  1.  數學函數   數學函數用於執行一些比較復雜的算術操作。MySQL支持很多的數學函數。若發生錯誤,所有的數學函數都會返回NULL。   (1)greatest()和least()函數   是數學函數中經常使用的函數,它們的功能是獲得一組數中的最大值和最小值。例如:SELECTGREATEST(10,9,128,1),LEAST(1,2,3);   數學函數還可以嵌套使用,例如:   SELECT GREATEST(-2,LEAST(0,3)),LEAST(1,GREATEST(1,2));   注意:MySQL不允許函數名和括號之間有空格。   (2)FLOOR()和CEILING()函數   floor()用於獲得小於一個數的最大整數值,ceiling()函數用於獲得大於一個數的最小整數值,例如:   SELECT FLOOR(-1.2), CEILING(-1.2),FLOOR(9.9), CEILING(9.9);   結果為:-2,-1,9,10;   (3)ROUND()和TRUNCATE()函數   round()函數用於獲得一個數的四捨五入的整數值:   SELECTROUND(5.1),ROUND(25.501),ROUND(9.8);   結果為:5,26,10;   truncate()函數用於把一個數字截取為一個指定小數個數的數字,逗號後面的數字表示指定小數的個數:   SELECT TRUNCATE(1.54578, 2),TRUNCATE(-76.12, 5);   結果為:1.54,-76.12000;   (4)ABS()函數:用來獲得一個數的絕對值   (5)sign()函數   返回數字的符號,返回的結果是正數(1)、負數(-1)或者零(0):   SELECT SIGN(-2),SIGN(2),SIGN(0);   結果為:-1,1,0;   (6)sqrt()函數返回一個數的平方根   (7)POW()函數   pow()函數以一個數作為另外一個數的指數,並返回結果:   SELECTPOW(2,2),POW(10, -2),POW(0,3);   結果為:4,0.01,0;   (8)SIN()、COS()、TAN()、ASIN()、ACOS()和ATAN()函數   分別返回一個角度(弧度)的正弦、余弦、正切、反正弦、反余弦和反正切值   如果使用的是角度而不是弧度,可以使用degrees()和radians ()函數進行轉換。   (9)BIN()、OTC()和HEX()函數   BIN()、OTC()和HEX()函數分別返回一個數的二進制、八進制和十六進制值,這個值作為字符串返回;   2.       聚合函數   MySQL有一組函數是特意為求和或者對表中的數據進行集中概括而設計的。這一組函數就叫做聚合函數。聚合函數常常用於對一組值進行計算,然後返回單個值。通過把聚合函數(如COUNT和SUM)添加到帶有一個GROUPBY子句的SELECT語句塊中,數據就可以聚合。聚合意味著是求一個和、平均、頻次及子和,而不是單個的值。   3.  字符串函數   因為MySQL數據庫不僅包含數字數據,還包含字符串,因此MySQL有一套為字符串操作而設計的函數。在字符串函數中,包含的字符串必須要用單引號括起。   (1)ASCII()函數   語法格式: ASCII (char)   返回字符表達式最左端字符的ASCII值。參數char的類型為字符型的表達式,返回值為整型。   例: 返回字母A的ASCII碼值。SELECTASCII('A'); 結果為:65   (2)CHAR()函數   語法格式: CHAR (x1,x2,x3,…)   將x1、x2……的ASCII碼轉換為字符,結果組合成一個字符串。參數x1,x2,x3……為介於0~255之間的整數,返回值為字符型。   例: 返回ASCII碼值為65、66、67的字符,組成一個字符串。   SELECTCHAR(65,66,67);  結果為:ABC   (3)LEFT和RIGHT函數   語法格式: left | right ( str ,x )   分別返回從字符串str左邊和右邊開始指定x個字符。   例: SELECT LEFT(課程是什麼, 2)   執行結果為:課程;   (4)TRIM、LTRIM 和RTRIM函數(刪除)   語法格式: trim | ltrim |rtrim(str)   使用LTRIM和RTRIM分別刪除字符串中首(左邊)空格和尾(右邊)空格,返回值為字符串。參數str為字符型表達式,返回值類型為varchar。TRIM刪除字符串首部和尾部的所有空格。   (5)RPAD和LPAD函數(填補)   語法格式: rpad | lpad( str, n, pad)   使用RPAD和LPAD分別用字符串pad對字符串str的右邊和左邊進行填補直至str中字符數目達到n個,最後返回填補後的字符串。若str中的字符個數大於n,則返回str的前n個字符。   例: 執行如下語句:   SELECT RPAD('中國加油',8, '!'),LPAD('welcome',10, '*');   結果為:中國加油!!!!(共八個),***welcome(共十個);   (6)REPLACE函數   語法格式: replace (str1 , str2 , str3 )   REPLACE函數用於用字符串str3替換str1中所有出現的字符串str2。最後返回替換後的字符串。   例: 執行如下語句:   SELECTREPLACE('Welcome to CHINA','o', 'K');   結果為:WelcKme tK CHINA   (7)CONCAT函數   語法格式: concat(s1,s2,…sn)   CONCAT函數用於連接指定的幾個字符串。   例: 執行如下語句:SELECT CONCAT('中國', '加油');   結果為:中國加油   (8)SUBSTRING函數   語法格式: substring (expression , Start, Length )   返回expression中指定的部分數據。參數expression可為字符串、二進制串、text、image字段或表達式。

Start、Length均為整型,前者指定子串的開始位置,後者指定子串的長度(要返回字節數)。如果 expression 是字符類型和二進制類型,則返回值類型與expression的類型相同。如果為text類型,返回的是varchar類型。   例: 如下程序在一列中返回XS表中所有女同學的姓氏,在另一列中返回名字。   USEXSCJ;SELECT SUBSTRING(姓名,1,1) AS 姓, SUBSTRING(姓名, 2,LENGTH(姓名)-1) AS 名    FROM XS  WHERE 性別=0  ORDER BY 姓名;   說明:LENGTH函數的作用是返回一個字符串的長度。   (9)STRCMP函數   語法格式: strcmp (s1,s2)   STRCMP函數用於比較兩個字符串,相等返回0,s1大於s2返回1,s1小於s2返回-1。   例: 執行如下語句: SELECT STRCMP('A', 'A'), STRCMP('ABC', 'OPQ'),STRCMP('T', 'B');   結果為:0,-1,1;   4.  日期和時間函數   MySQL有很多日期和時間數據類型,所以有相當多的操作日期和時間的函數。   (1)NOW()   使用NOW()函數可以獲得當前的日期和時間,它以YYYY-MM-DD HH∶MM∶SS的格式返回當前的日期和時間:   (2)CURTIME()和CURDATE()   curtime()和curdate()函數比NOW更為具體化,它們分別返回的是當前的時間和日期,沒有參數:   (3)YEAR()   YEAR()函數分析一個日期值並返回其中關於年的部分:   SELECTYEAR(20080512142800),YEAR('1982-11-02');   結果為:2008,1982;   (4)MONTH()和MONTHNAME()   month()和monthname()函數分別以數值和字符串的格式返回月的部分:   (5)DAYOFYEAR(),DAYOFWEEK()和DAYOFMONTH()   dayofyear(),DAYOFWEEK()和DAYOFMONTH()函數分別返回這一天在一年、一星期及一個月中的序數:   (6)DAYNAME()   和MONTHNAME()相似,dayname()以字符串形式返回星期名:   (7)WEEK()和YEARWEEK()   WEEK()函數返回指定的日期是一年的第幾個星期,而YEARWEEK()函數返回指定的日期是哪一年的哪一個星期:   (8)HOUR()、MINUTE()和SECOND()   HOUR(),MINUTE()和SECOND()函數分別返回時間值的小時、分鐘和秒的部分:   (9)DATE_ADD()和DATE_SUB()   DATE_ADD()和DATE_SUB()函數可以對日期和時間進行算術操作,它們分別用來增加和減少日期值,其使用的關鍵字如下表所示。   關  鍵  字   間隔值的格式   關  鍵  字   間隔值的格式   DAY   日期   MINUTE   分鐘   DAY_HOUR   日期∶小時   MINUTE_ SECOND   分鐘∶秒   DAY_MINUTE   日期∶小時∶分鐘   MONTH   月   DAY_SECOND   日期∶小時∶分鐘∶秒   SECOND   秒   HOUR   小時   YEAR   年   HOUR_MINUTE   小時∶分鐘   YEAR_MONTH   年-月   HOUR_ SECOND   小時∶分鐘∶秒   DATE_ADD()和DATE_SUB()函數的語法格式為:   DATE_ADD | DATE_SUB(date, INTERVAL int keyword)   date是需要的日期和時間,INTERVAL關鍵字表示一個時間間隔。int表示需要計算的時間值,keyword已經在上表中列出。DATE_ADD函數是計算date加上間隔時間後的值,DATE_SUB則是計算date減去時間間隔後的值。   舉例: SELECT DATE_ADD('1986-08-08',INTERVAL 17 DAY);   5.  加密函數(非重點)   MySQL特意設計了一些函數對數據進行加密。這裡簡單介紹如下幾個函數。   (1)AES_ENCRYPT和AES_DECRYPT函數   語法格式為:aes_encrypt  aes_decrypt(str,key)   AES_ENCRYPT函數返回的是密鑰key對字符串str利用高級加密標准(AES)算法加密後的結果,結果是一個二進制的字符串,以BLOB類型存儲。而AES_DECRYPT函數用於對用高級加密方法加密的數據進行解密。若檢測到無效數據或不正確的填充,函數會返回NULL。AES_ENCRYPT和AES_DECRYPT函數可以被看做MySQL中普遍使用的最安全的加密函數。   (2)ENCODE和DECODE函數   語法格式為:  encode |deCODE(str,key)   ENCODE函數用來對一個字符串str進行加密,返回的結果是一個二進制字符串,以BLOB類型存儲。DECODE函數使用正確的密鑰對加密後的值進行解密。與上面的AES_ENCRYPT和AES_DECRYPT函數相比,這兩個函數加密程度相對較弱。   (3)ENCRYPT函數   使用UNIX crypt()系統加密字符串,encrypt(str,salt)函數接收要加密的字符串和用於加密過程的salt(一個可以確定唯一口令的字符串)。在Windows上不可用。   (4)PASSWORD函數   格式為:   password(str)   返回字符串str加密後的密碼字符串,適合於插入到MySQL的安全系統。該加密過程不可逆,和UNIX密碼加密過程使用不同的算法。主要用於MySQL的認證系統。   例: 返回字符串“MySQL”的加密版本。   SELECTPASSWORD('MySQL');   6.  控制流函數   MySQL有幾個函數是用來進行條件操作的。這些函數可以實現SQL的條件邏輯,允許開發者將一些應用程序業務邏輯轉換到數據庫後台。   (1)IFNULL和NULLIF函數   IFNULL函數的語法格式為: IFNULL(expr1,expr2)   此函數的作用是:判斷參數expr1是否為NULL,當參數expr1為NULL時返回expr2,不為NULL時返回expr1。IFNULL的返回值是數字或字符串。   例: 執行如下語句:   SELECT IFNULL(1,2), IFNULL(NULL, 'MySQL'), IFNULL(1/0,10);   結果為:1,MySQL,10.0000;   NULLIF函數的語法格式為:NULLIF(expr1,expr2)   NULLIF函數用於檢驗提供的兩個參數是否相等,如果相等,則返回NULL,如果不相等就返回第一個參數。   例: 執行如下語句:   SELECTNULLIF(1,1), NULLIF('A', 'B'), NULLIF(2+3, 3+4);   結果為:null,A,5;   (2)IF函數   和許多腳本語言提供的IF()函數一樣,MySQL的IF()函數也可以建立一個簡單的條件測試。   語法格式如下: IF(expr1,expr2,expr3)   這個函數有3個參數,第一個是要被判斷的表達式,如果表達式為真,IF()將會返回第二個參數;如果為假,IF()將會返回第三個參數。   例: 判斷2*4是否大於9–5,是則返回“是”,否則返回“否”。   SELECTIF(2*4>9–5, '是', '否');  結果為:是;   例:返回XS表名字為兩個字的學生姓名、性別和專業名。性別值如為0則顯示為“女”,為1則顯示為“男”。   SELECT 姓名, IF(性別=0, '女', '男')  AS 性別, 專業名      FROMXS   WHERE 姓名LIKE '__';   7.   格式化函數   MySQL還有一些函數是特意為格式化數據設計的。   (1)FORMAT()函數   語法格式為: format(x, y)   FORMAT()函數把數值格式化為以逗號間隔的數字序列。FORMAT()的第一個參數x是被格式化的數據,第二個參數y是結果的小數位數。   例如: SELECT FORMAT(111111.23654,2), FORMAT(-5468,4);   結果為:111111.23,-5468.0000;    (2)DATE_FORMAT()和TIME_FORMAT()函數   用來格式化日期和時間值。語法格式如下:   DATE_FORMAT/TIME_FORMAT(date | time, fmt)   其中,date和time是需要格式化的日期和時間值,fmt是日期和時間值格式化的形式,下表列出了MySQL中的日期/時間格式化代碼。   關  鍵  字   間隔值的格式   關  鍵  字   間隔值的格式   %a   縮寫的星期名(Sun,Mon…)   %p   AM或PM   %b   縮寫的月份名(Jan,Feb…)   %r   時間,12小時的格式   %d   月份中的天數   %S   秒(00,01)   %H   小時(01,02…)   %T   時間,24小時的格式   %I   分鐘(00,01…)   %w   一周中的天數(0,1)   %j   一年中的天數(001,002…)   %W   長型星期的名字(Sunday,Monday…)   %m   月份,2位(00,01…)   %Y   年份,4位   %M   長型月份的名字(January,February)   舉例:SELECT DATE_FORMAT(NOW(), '%W,%d,%M,%Y  %r');   注意:這兩個函數是對大小寫敏感的。   (3)INET_NTOA()和INET_ATON()函數   MySQL中的inet_ntoa()和inet_aton()函數可以分別把IP地址轉換為數字或者進行相反的操作。如下面的例子所示:   SELECTINET_ATON('192.168.1.1');   8.  類型轉換函數   MySQL提供cast()函數進行數據類型轉換,它可以把一個值轉換為指定的數據類型。   語法格式: CAST(expr, AS type)   expr是CAST函數要轉換的值,type是轉換後的數據類型。   在CAST函數中MySQL支持這幾種數據類型:BINARY、CHAR、DATE、TIME、DATETIME、SIGNED和UNSIGNED。   通常情況下,當使用數值操作時,字符串會自動地轉換為數字,因此下面例子中兩種操作得到相同的結果:   SELECT1+'99', 1+CAST('99' AS SIGNED);   字符串可以指定為binary類型,這樣它們的比較操作就成為大小寫敏感的。使用CAST()函數指定一個字符串為BINARY和字符串前面使用BINARY關鍵詞具有相同的作用。   例: 執行如下語句:   SELECT'a'=BINARY 'A', 'a'=CAST('A' AS BINARY);   結果為:0,0;(兩個表達式的結果都為零表示兩個表達式都為假)   MySQL還可以強制將日期和時間函數的值作為一個數而不是字符串輸出。   例: 將當前日期顯示成數值形式。   SELECTCAST(CURDATE() AS SIGNED);   9.  系統信息函數   MySQL還具有一些特殊的函數用來獲得系統本身的信息,下表列出了大部分信息函數。   函    數   功    能   DATABASE()   返回當前數據庫名   benchmark(n,expr)   將表達式expr重復運行n次   charsetstr)   返回字符串str的字符集   Connection_id()   返回當前客戶的連接ID   FOUND_ROWS()   將最後一個SELECT查詢(沒有以LIMIT語句進行限制)返回的記錄行數返回   GET_LOCK(str,dur)   獲得一個由字符串str命名的並且有dur秒延時的鎖定   IS_FREE_LOCK(str)   檢查以str命名的鎖定是否釋放   LAST_INSERT_ID()   返回由系統自動產生的最後一個AUTOINCREMENT ID的值   master_pos_wait(log,pos,dur)   鎖定主服務器dur秒直到從服務器與主服務器的日志log指定的位置pos同步   please_lock(str)   釋放由字符串str命名的鎖定   USER()或SYSTEM_USER()   返回當前登錄用戶名   version()   返回MySQL服務器的版本   (1)DATABASE()、USER()和VERSION()函數可以分別返回當前所選數據庫、當前用戶和MySQL版本信息:     (2)BENCHMARK() 函數用於重復執行n次表達式expr。它可以被用於計算MySQL 處理表達式的速度。結果值通常為零。另一種用處來自 MySQL客戶端內部,能夠報告問詢執行的次數,根據經過的時間值可以推斷服務器的性能。例如:   SELECT BENCHMARK(10000000, ENCODE('hello','goodbye'));   結果為:0;   這個例子中,MySQL計算ENCODE('hello','goodbye')表達式10 000 000次需要2.16秒。   (3)FOUND_ROWS()函數用於返回最後一個SELECT語句返回的記錄行的數目。   如最後執行的SELECT語句是:SELECT * FROM XS;   之後執行如下語句:SELECT FOUND_ROWS();   結果為:22;   說明:SELECT語句可能包括一個LIMIT子句,用來限制服務器返回客戶端的行數。在有些情況下,需要不用再次運行該語句而得知在沒有LIMIT 時到底該語句返回了多少行。為了知道這個行數,包括在SELECT 語句中選擇SQL_CALC_FOUND_ROWS,隨後調用FOUND_ROWS()。例如,執行如下語句:   SELECT SQL_CALC_FOUND_ROWS * FROM XS WHERE 性別=1 LIMIT 5;   之後可以使用FOUND_ROWS()函數,顯示在沒有LIMIT子句的情況下SELECT語句所返回的行數。   結果如下:14;
    作者 tianyazaiheruan

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved