




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
存儲(chǔ)過程概述創(chuàng)建和執(zhí)行存儲(chǔ)過程管理存儲(chǔ)過程存儲(chǔ)函數(shù)第七章存儲(chǔ)過程和函數(shù)學(xué)習(xí)目標(biāo)掌握了解理解1掌握存儲(chǔ)過程的創(chuàng)建、修改和執(zhí)行、存儲(chǔ)函數(shù)的創(chuàng)建和執(zhí)行、常用內(nèi)置函數(shù)的使用2理解存儲(chǔ)過程的作用、常用內(nèi)置函數(shù)的含義3了解存儲(chǔ)過程和存儲(chǔ)函數(shù)、程序存儲(chǔ)的類型MySQL程序設(shè)計(jì)基礎(chǔ)7.1存儲(chǔ)過程概述7.27.3創(chuàng)建和執(zhí)行存儲(chǔ)過程目錄管理存儲(chǔ)過程7.4存儲(chǔ)函數(shù)7.5目錄在MySQL中最常見的變量類型有局部變量和用戶自定義變量?jī)煞N。1.局部變量要定義局部變量必須使用DECLARE來聲明,定義的同時(shí)可以使用default對(duì)局部變量初始化賦值。DECLARE語句格式如下:DECLAREvar_name[,…]type[DEFAULTvalue]value是給變量提供一個(gè)默認(rèn)值,包含在一個(gè)DEFAULT子句中,它的值可以被指定為一個(gè)表達(dá)式,如果沒有DEFAULT子句,初始值為NULL。例如:DECLAREnumintDEFAULT0;7.1MySQL程序設(shè)計(jì)基礎(chǔ)7.1.1變量2.用戶自定義變量用戶自定義變量的聲明以“@”開頭,形如:@var_name。為了實(shí)現(xiàn)不同SQL語句中進(jìn)行值的傳遞,可以把一些數(shù)值存儲(chǔ)在自定義的用戶變量中,不同的SQL語句都可以對(duì)它進(jìn)行訪問。用戶變量在客戶端和數(shù)據(jù)庫的連接建立時(shí)被定義,當(dāng)連接斷開時(shí),用戶變量將會(huì)被釋放。用戶變量無需用DECLARE關(guān)鍵字進(jìn)行定義,可以直接使用。例如:SET@c1=1,@c2=2,@c3=4;在編寫存儲(chǔ)過程和存儲(chǔ)函數(shù)時(shí),可以使用流程控制語句對(duì)SQL語句進(jìn)行組織,使其成為符合業(yè)務(wù)邏輯的代碼塊。MySQL中常見的流程控制語句主要有:IF語句、CASE語句、LOOP語句、WHILE語句、ITERATE語句、REPEAT語句等。7.1.2流程控制語句1.IF語句IF語句可以通過判斷一個(gè)邏輯條件是TRUE還是FALSE,轉(zhuǎn)去執(zhí)行相應(yīng)的語句,它的語法格式如下:IFexpr_conditionTHENstatement_list[ELSEIFexpr_conditionTHENstatement_list][ELSEstatement_list]ENDIF2.CASE語句CASE也是一個(gè)條件判斷語句,多用于多分支判斷的程序結(jié)構(gòu),它的常用語法格式如下:CASEcase_exprWHENwhen_valueTHENstatement_list[WHENwhen_valueTHENstatement_list]……[ELSEstatement_list]ENDCASE3.LOOP語句LOOP是一個(gè)循環(huán)語句,用來進(jìn)行一個(gè)語句塊的循環(huán)操作。LOOP語句并不進(jìn)行條件判斷,會(huì)一直執(zhí)行循環(huán)體的語句,如果要退出語句的執(zhí)行,需要使用LEAVE等語句退出循環(huán)。LOOP語句的語法格式如下:[loop_label:]LOOPStatement_listENDLOOt_listP[loop_label]4.LEAVE語句在循環(huán)語句LOOP使用過程中,當(dāng)循環(huán)條件不滿足時(shí),可以使用LEAVE語句跳出循環(huán)體。LEAVE語句用于跳出有循環(huán)標(biāo)志的流程控制語句,基本語法結(jié)構(gòu)如下:LEAVElabel5.ITERATE語句與LEAVE語句結(jié)束整個(gè)循環(huán)不同,ITERATE語句用于無條件轉(zhuǎn)到語句段的開頭處。ITERATE語句的格式如下:ITERATElable6.REPEAT語句REPEAT語句用于循環(huán)執(zhí)行一個(gè)語句塊,采用的方式是先無條件執(zhí)行語句塊后再進(jìn)行條件表達(dá)式判斷,如果表達(dá)式為真,則循環(huán)結(jié)束,否則重復(fù)執(zhí)行語句塊。REPEAT語句的格式如下:[repeat_lable:]REPEATstatement_listUNTILexpr_conditionENDREPEAT[repeat_lable]7.WHILE語句WHILE語句也用于循環(huán)執(zhí)行一個(gè)語句塊,但是與REPEAT語句不同,WHILE語句執(zhí)行時(shí)首先判斷條件表達(dá)式是否為真,如果為真則繼續(xù)執(zhí)行循環(huán)體內(nèi)語句,否則直接退出循環(huán)體。WHILE語句的格式如下:[while_lable:]WHILEexpr_conditionDOStatement_listENDWHILE[while_lable]使用SQL語句進(jìn)行查詢過程中,查詢結(jié)果將返回很多記錄,如果記錄量很大時(shí),需要使用光標(biāo)來對(duì)查詢結(jié)果集中的記錄進(jìn)行逐條讀取,它可以對(duì)多行數(shù)據(jù)進(jìn)行輕松的處理。7.1.3光標(biāo)1.光標(biāo)的聲明在使用光標(biāo)對(duì)結(jié)果集中的數(shù)據(jù)進(jìn)行處理時(shí),需要首先聲明光標(biāo),光標(biāo)的聲明必須在聲明變量、條件之后,聲明處理程序之前。光標(biāo)的聲明格式如下:DECLAREcursor_nameCURSORFORselect_statement其中cursor_name表示光標(biāo)的名字,select_statement代表SELECT語句的內(nèi)容,返回一個(gè)用于創(chuàng)建光標(biāo)的結(jié)果集。下面聲明一個(gè)名為cur_teacher的光標(biāo)。代碼如下:DECLAREcur_xsxx
CURSORFORSELECTxh,xmFROMtb_xsxxb;2.光標(biāo)的使用MySQL中使用OPEN關(guān)鍵字來打開光標(biāo),打開光標(biāo)之后就可以使用光標(biāo)了。其語法的基本形式如下:OPENcursor_name;FETCHcursor_nameINTOvar_name[,var_name…];下面我們使用一個(gè)名為cur_teacher的光標(biāo)。將查詢出來的數(shù)據(jù)存入xs_xh和xs_xm這兩個(gè)變量中,代碼如下:FETCHcur_xsxx
INTOxs_xh,xs_xm;3.光標(biāo)的關(guān)閉MySQL中使用CLOSE關(guān)鍵字來關(guān)閉光標(biāo)。其語法的基本形式如下:CLOSEcursor_name;其中,cursor_name參數(shù)表示光標(biāo)的名稱。示例:下面關(guān)閉一個(gè)名為cur_teacher的光標(biāo)。代碼如下:CLOSEcur_teacher;下面舉一個(gè)例子,使用光標(biāo)查詢顯示學(xué)生信息表tb_xsxxb中所有學(xué)生學(xué)號(hào)和姓名的字段信息,代碼段如下:delimiter//CREATEPROCEDUREp_1()BEGIN DECLAREno_more_recordINTDEFAULT0; DECLAREt_XHchar(12); DECLAREt_XMvarchar(30); DECLAREcur_recordCURSORFORSELECTXH,XMfromtb_xsxxb;/*首先對(duì)游標(biāo)進(jìn)行定義*/ DECLARECONTINUEHANDLERFORNOTFOUNDSETno_more_record=1;/*條件處理,針對(duì)NOTFOUND的條件,當(dāng)沒有記錄時(shí)no_more_record賦值為1*/ OPENcur_record;/*使用OPEN打開游標(biāo)*/ FETCHcur_recordINTOt_XH,t_XM;/*讀取一條記錄到變量中*/ WHILEno_more_record!=1DO/*如果記錄未讀取結(jié)束*/ SELECTt_XH,t_XM; FETCHcur_recordINTOt_XH,t_XM;/*繼續(xù)讀取下一條記錄到變量中*/ ENDWHILE; CLOSEcur_record;/*用完后需要用CLOSE把資源釋放掉*/END;//實(shí)例
7-1存儲(chǔ)過程是數(shù)據(jù)庫服務(wù)器上一組預(yù)先編譯好的SQL語句的集合,作為一個(gè)單元存儲(chǔ)在數(shù)據(jù)庫中,可以被應(yīng)用程序作為一個(gè)整體來進(jìn)行調(diào)用。在調(diào)用過程中,存儲(chǔ)過程可以接收參數(shù),執(zhí)行后返回參數(shù)值。7.2存儲(chǔ)過程概述數(shù)據(jù)庫開發(fā)人員在進(jìn)行數(shù)據(jù)庫開發(fā)時(shí),為了實(shí)現(xiàn)一定的功能,經(jīng)常會(huì)將負(fù)責(zé)不同功能的語句集中起來而且按照用途分別獨(dú)立放置,以便能夠反復(fù)調(diào)用,而這些獨(dú)立放置且擁有不同功能的語句塊,稱之為“過程”(Procedure)。存儲(chǔ)過程(StoredProcedure)是一組完成特定功能的SQL語句集,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫中,用戶通過過程名和給出參數(shù)值來調(diào)用它們。7.2.1存儲(chǔ)過程基本概念MySQL的存儲(chǔ)程序可分以下四大類:(1)存儲(chǔ)函數(shù)(storedfunction)。返回一個(gè)計(jì)算結(jié)果,該結(jié)果可以用在表達(dá)式里。(2)存儲(chǔ)過程(storedprocedure)。不直接返回一個(gè)結(jié)果,但可以用來完成一般的運(yùn)算或是生成一個(gè)結(jié)果集并傳遞回客戶。(3)觸發(fā)器(trigger)。與數(shù)據(jù)表相關(guān)聯(lián),當(dāng)那個(gè)數(shù)據(jù)表被INSERT、DELETE、UPDATE語句修改時(shí),觸發(fā)器將自動(dòng)執(zhí)行。(4)事件(event)。根據(jù)時(shí)間表在預(yù)訂時(shí)刻自動(dòng)執(zhí)行。7.2.2存儲(chǔ)過程的類型(1)存儲(chǔ)過程的使用,提高了程序設(shè)計(jì)的靈活性,增強(qiáng)了SQL語言的功能。(2)存儲(chǔ)過程把一組功能代碼作為單位組件。(3)使用存儲(chǔ)過程有利于提高程序的執(zhí)行速度。(4)使用存儲(chǔ)過程能減少網(wǎng)絡(luò)訪問的負(fù)荷。(5)作為一種安全機(jī)制,系統(tǒng)管理員可以充分利用存儲(chǔ)過程對(duì)相應(yīng)的數(shù)據(jù)的訪問權(quán)限的進(jìn)行限制。7.2.3存儲(chǔ)過程的作用創(chuàng)建存儲(chǔ)過程語法格式如下:CREATEPROCEDUREsp_name([proc_parameter[,...]])[characteristic...]routine_body其中:
proc_parameter:[IN|OUT|INOUT]param_nametypecharacteristic:LANGUAGESQL|[NOT]DETERMINISTIC|{CONTAINSSQL|NOSQL|READSSQLDATA|MODIFIESSQLDATA}|SQLSECURITY{DEFINER|INVOKER}|COMMENT'string'routine_body:ValidSQLprocedurestatementorstatements7.3創(chuàng)建和執(zhí)行存儲(chǔ)過程7.3.1創(chuàng)建和執(zhí)行不帶參數(shù)的存儲(chǔ)過程創(chuàng)建一個(gè)存儲(chǔ)過程p_1,該存儲(chǔ)過程輸出學(xué)生信息表tb_xsxxb表中姓“王”的全部記錄。對(duì)應(yīng)的SQL語句如下:DELIMITER//CREATEPROCEDUREp_1()BEGINSELECT*FROMtb_xsxxb
WHERExmlike'王%';END;//實(shí)例
7-2使用SQL語句執(zhí)行例7-2中創(chuàng)建的存儲(chǔ)過程p_1。對(duì)應(yīng)的SQL語句如下:執(zhí)行結(jié)果如下所示:USEjwxt;CALLp_1();創(chuàng)建一個(gè)存儲(chǔ)函數(shù)f_1,輸出1+1的和;創(chuàng)建一個(gè)存儲(chǔ)函數(shù)f_2,輸入兩個(gè)參數(shù),計(jì)算兩個(gè)參數(shù)的和。對(duì)應(yīng)的SQL語句如下:DELIMITER//CREATEFUNCTION
f_1()BEGIN
RETURN1+1;END;//實(shí)例
7-3DELIMITER//CREATEDEFINER=`root`@`localhost`FUNCTION`f_2`(`a`int,`b`int)RETURNSint(11)BEGIN RETURNa+b;END//使用SQL語句分別執(zhí)行例7-4中創(chuàng)建的存儲(chǔ)函數(shù)f_1和f_2。對(duì)應(yīng)的SQL語句如下:執(zhí)行結(jié)果如下所示:USEjwxt;selectf_1();USEjwxt;selectf_2(10,10);1.創(chuàng)建帶輸入?yún)?shù)的存儲(chǔ)過程輸入?yún)?shù)是指由調(diào)用程序向存儲(chǔ)過程傳遞的參數(shù),在創(chuàng)建存儲(chǔ)過程語句中定義輸入?yún)?shù),而在執(zhí)行該存儲(chǔ)過程中給出參數(shù)相應(yīng)的值。7.3.2創(chuàng)建和執(zhí)行帶輸入?yún)?shù)的存儲(chǔ)過程(1)使用變量名傳遞參數(shù)值在執(zhí)行存儲(chǔ)過程的語句中,通過語句SET@parameter_name=value設(shè)定給參數(shù)的傳遞值,然后按位置傳遞參數(shù)。其語法格式如下:CALLprocedure_name([@parameter_name=value][,…n]);創(chuàng)建一個(gè)名為p_2的存儲(chǔ)過程。該存儲(chǔ)過程能根據(jù)用戶給定的教師職稱值輸出教師信息表tb_jsxxb中教師職稱為用戶給定值的全部記錄。該存儲(chǔ)過程的SQL語句如下:delimiter//CREATEPROCEDUREp_2(INjszcvarchar(10))BEGIN select*fromtb_jsxxbwherezc=jszc;END;//實(shí)例7-4調(diào)用存儲(chǔ)過程p_2,給定職稱值為“講師”,運(yùn)行結(jié)果如下:2.執(zhí)行帶輸入?yún)?shù)的存儲(chǔ)過程執(zhí)行帶輸入?yún)?shù)的存儲(chǔ)過程,有兩種方法:一種是使用變量名傳遞參數(shù)值;另一種是按給定表達(dá)式值傳遞參數(shù)值。用參數(shù)名傳遞參數(shù)值的方法執(zhí)行存儲(chǔ)過程p_2,分別查詢職稱為“講師”的記錄。
DELIMITER//SET@輸入職稱='講師';CALLp_2(@輸入職稱);//DELIMITER;實(shí)例7-5(2)按給定表達(dá)式值傳遞參數(shù)在執(zhí)行存儲(chǔ)過程的語句中,當(dāng)存儲(chǔ)過程含有多個(gè)輸入?yún)?shù)時(shí),采用這種方式傳遞值,給定參數(shù)值的順序必須與存儲(chǔ)過程中定義的輸入變量的順序一致。其語法格式如下:CALLprocedure_name(value1,value2,…)用按給定表達(dá)式值傳遞參數(shù)的方式執(zhí)行存儲(chǔ)過程p_2,分別查找職稱為“講師”和“副教授”的記錄。對(duì)應(yīng)的SQL語句如下:CALLp_2('講師');CALLp_2('副教授');實(shí)例7-6如果需要從存儲(chǔ)過程中返回一個(gè)或多個(gè)值,可以通過在創(chuàng)建存儲(chǔ)過程的語句中定義輸出參數(shù)來實(shí)現(xiàn)。定義輸出參數(shù),需要在CREATEPROCEDURE語句中定義參數(shù)時(shí)在參數(shù)名后面指定OUT關(guān)鍵字。語法格式如下:OUTparameter_namedatatype[=default]7.3.3創(chuàng)建和執(zhí)行帶輸出參數(shù)的存儲(chǔ)過程創(chuàng)建存儲(chǔ)過程p_3,要求能根據(jù)用戶給定的班級(jí)代碼值,統(tǒng)計(jì)出學(xué)生信息表tb_xsxxb表中對(duì)應(yīng)班級(jí)代碼的班級(jí)人數(shù),并將結(jié)果以輸出變量的形式返回給調(diào)用者。DELIMITER//CREATEPROCEDUREp_3(INbjdmchar(2),OUTbjrstinyint)BEGINSELECTCOUNT(*)INTObjrsFROMtb_xsxxbWHEREbjdm=bjdm;END//DELIMITER;實(shí)例
7-7執(zhí)行存儲(chǔ)過程p_3,統(tǒng)計(jì)班級(jí)代碼為“01”的班級(jí)人數(shù)。運(yùn)行結(jié)果:CALLp_3('01',@a01);SELECT@a01;實(shí)例7-8(1)我們可以用SELECTnameFROMcWHEREdb='數(shù)據(jù)庫名',或者SELECTroutine_nameFROMinformation_schema.routinesWHEREroutine_schema='數(shù)據(jù)庫名',或者SHOWPROCEDURESTATUSWHEREdb='數(shù)據(jù)庫名'用于顯示數(shù)據(jù)庫內(nèi)存儲(chǔ)過程的列表。(2)使用SHOWCREATEPROCEDURE數(shù)據(jù)庫.存儲(chǔ)過程名;就可以查看當(dāng)前存儲(chǔ)過程的詳細(xì)。7.4管理存儲(chǔ)過程7.4.1查看存儲(chǔ)過程查看p_1存儲(chǔ)過程的信息。對(duì)應(yīng)的SQL語句如下:SELECT*cWHEREdb='jwxt';實(shí)例7-9查看存儲(chǔ)過程p_2的定義語句等信息。對(duì)應(yīng)的SQL語句如下:SHOWCREATEPROCEDUREp_2;實(shí)例7-10修改存儲(chǔ)過程是由ALTERPROCEDURE語句來完成的,其語法格式如下:ALTER{PROCEDURE|FUNCTION}sp_name[characteristic...]characteristic:{CONTAINSSQL|NOSQL|READSSQLDATA|MODIFIESSQLDATA}|SQLSECURITY{DEFINER|INVOKER}|COMMENT'string’7.4.2修改存儲(chǔ)過程修改存儲(chǔ)過程p_1的定義。將讀寫權(quán)限改為MODIFIESSQLDATA,并指明調(diào)用者可以執(zhí)行。對(duì)應(yīng)的SQL語句如下:ALTERPROCEDUREp_1MODIFIESSQLDATASQLSECURITYINVOKER;實(shí)例7-11查詢修改后存儲(chǔ)過程
p_1的信息。運(yùn)行結(jié)果如下所示:SELECTSPECIFIC_NAME,SQL_DATA_ACCESS,SECURITY_TYPEFROMinformation_schema.RoutinesWHEREROUTINE_NAME='p_1';實(shí)例7-12存儲(chǔ)過程的刪除是通過DROPPROCEDURE語句來實(shí)現(xiàn)的。其語法格式為:DROP{PROCEDURE|FUNCTION}[IFEXISTS]sp_nameIFEXISTS子句是一個(gè)MySQL的擴(kuò)展。如果程序或函數(shù)不存儲(chǔ),它防止發(fā)生錯(cuò)誤。7.4.3刪除存儲(chǔ)過程使用SQL語句刪除存儲(chǔ)過程p_2。對(duì)應(yīng)的SQL語句如下:DROPPROCEDUREp_2;運(yùn)行結(jié)果如下:實(shí)例7-13存儲(chǔ)過程與存儲(chǔ)函數(shù)一樣,都是由sql語句和過程式語句所組成的代碼片段,并且可以被應(yīng)用程序和其他sql語句調(diào)用。它們之間的區(qū)別在于:(1)存儲(chǔ)函數(shù)不能有輸出參數(shù),因?yàn)榇鎯?chǔ)函數(shù)自身就是輸出參數(shù);而存儲(chǔ)過程可以擁有輸出參數(shù)。(2)可以直接對(duì)存儲(chǔ)函數(shù)進(jìn)行調(diào)用,而不需要使用call語句;而對(duì)存儲(chǔ)過程的調(diào)用,需要使用call語句。(3)存儲(chǔ)函數(shù)中必須包含一條return語句,而這條特殊的sql語句不允許包含于存儲(chǔ)過程中。7.5存儲(chǔ)函數(shù)7.5.1存儲(chǔ)過程與存儲(chǔ)函數(shù)聯(lián)系與區(qū)別MySQL中,創(chuàng)建存儲(chǔ)函數(shù)的基本形式如下:CREATEFUNCTIONsp_name([func_parameter[,...]])RETURNStype[characteristic...]routine_bodyRETURN子句用于聲明存儲(chǔ)函數(shù)返回值的數(shù)據(jù)類型。7.5.2創(chuàng)建和執(zhí)行存儲(chǔ)函數(shù)創(chuàng)建存儲(chǔ)函數(shù)f_1,包含兩個(gè)int參數(shù),返回兩個(gè)數(shù)之和。對(duì)應(yīng)的SQL語句如下:DELIMITER//CREATEFUNCTIONf_1(xINT,yINT)RETURNSINTBEGINRETURNx+y;END//DELIMITER;實(shí)例7-14調(diào)用存儲(chǔ)函數(shù)f_1(方法一):調(diào)用存儲(chǔ)函數(shù)f_1(方法二):運(yùn)行結(jié)果如下:
運(yùn)行結(jié)果如下:set@x=10;set@y=20;set@result=f_1(@x,@y);select@result;selectf_1(10,20);為了能更好的為用戶服務(wù),MySQL提供了豐富的系統(tǒng)函數(shù),這些函數(shù)無需定義就能直接使用,其中包括數(shù)學(xué)函數(shù)、聚合函數(shù)、字符串函數(shù)、日期和時(shí)間函數(shù)、加密函數(shù)和格式化函數(shù)等。7.5.3MySQL的系統(tǒng)函數(shù)數(shù)學(xué)函數(shù)ABS(x):返回x的絕對(duì)值。BIN(x):返回x的二進(jìn)制。CEILING(x):返回大于x的最小整數(shù)值(向上取整)。EXP(x):返回值自然對(duì)數(shù)e的x次方。FLOOR(x):返回小于x的最大整數(shù)值(向下取整)。LN(x):返回x的自然對(duì)數(shù)。LOG(x,y):返回x的以y為底的對(duì)數(shù)。MOD(x,y):返回x/y的余數(shù)。PI():返回圓周率的值。RAND():返回0到1內(nèi)的隨機(jī)數(shù)。ROUND(x,y):返回參數(shù)x的四舍五入的有y位小數(shù)的值。SIGN(x):返回代表數(shù)字x的符號(hào)的值(負(fù)數(shù),零,正數(shù)對(duì)應(yīng)-1,0,1)。SQRT(x):返回一個(gè)數(shù)的平方根。TRUNCATE(x,y):返回?cái)?shù)字x截短為y位小數(shù)的結(jié)果。聚合函數(shù)AVG(col):返回指定列的平均值。COUNT(col):返回指定列中非NULL值的個(gè)數(shù)。MIN(col):返回指定列的最小值。MAX(col):返回指定列的最大值。SUM(col):返回指定列的所有值之和。字符串函數(shù)(1)ASCII(char):返回字符的ASCII碼值。INSERT(str,x,y,instr):將字符串str從第x位置開始,y個(gè)字符長(zhǎng)的子串替換為字符串instr,返回結(jié)果。LCASE(str)或LOWER(str):返回將字符串str中所有字符改變?yōu)樾懞蟮慕Y(jié)果。UCASE(str)或UPPER(str):返回將字符串str中所有字符轉(zhuǎn)變?yōu)榇髮懞蟮慕Y(jié)果。LEFT(str,x):返回字符串str中最左邊的x個(gè)字符。RIGHT(str,x):返回字符串str中最右邊的x個(gè)字符。LENGTH(str):返回字符串str的存儲(chǔ)長(zhǎng)度(注:一個(gè)漢字在UTF8編碼為3,GBK為4)。CHAR_LENGTH(str):返回字符串str的字符個(gè)數(shù)(注:一個(gè)漢字為1)。BIT_LENGTH(str):返回字符str的字節(jié)長(zhǎng)度(注:一個(gè)漢字在UTF8編碼為3,GBK為4)。LTRIM(str):從字符串str中去除開頭的空格。TRIM(str):去除字符串首部和尾部的所有空格。字符串函數(shù)(2)POSITION(substrINstr):返回子串substr在字符串str中第一次出現(xiàn)的位置,無結(jié)果返回0。REVERSE(str):返回顛倒字符串str的結(jié)果。STRCMP(s1,s2):比較字符串s1和s2,完全相同返回0,反之返回-1。SUBSTR(x)和SUBSTRING(x):返回字符串指定位置指定長(zhǎng)度的子串(同義函數(shù))。REPLACE(str,from_str,to_str):替換str字符串中指定子串from_str為新子串to_str。SPACE(X):返回由X個(gè)空格構(gòu)成的字符串。CONCAT(s1,s2...,sn):將s1,s2...,sn連接成字符串。CONCAT_WS(seperator,str1,str2,…):將多個(gè)字符串以連接符seperator首尾相連。FORMAT(X,D[,locale]):按“###,###,###.0X”以四舍五入方式格式化字符串(數(shù)字)。REREAT(str,count):返回由count個(gè)str組成的結(jié)果。日期和時(shí)間函數(shù)CURDATE()或CURRENT_DATE():返回當(dāng)前的日期。CURTIME()或CURRENT_TIME():返回當(dāng)前的時(shí)間。DAYOFWEEK(date):返回date所代表的一星期中的第幾天(1~7)。DAYOFMONTH(date):返回date是一個(gè)月的第幾天(1~31)。DAYOFYEAR(date):返回date是一年的第幾天(1~366)。HOUR(time):返回time的小時(shí)值(0~23)。MINUTE(time):返回time的分鐘值(0~59)。MONTH(date):返回date的月份值(1~12)。MONTHNAME(date):返回date的月份名。NOW():返回當(dāng)前的日期和時(shí)間。QUARTER(date):返回date在一年中的季度(1~4)。WEEK(date):返回日期date為一年中第幾周(0~53)。YEAR(date):返回日期date的年份(1000~9999)。加密函數(shù)MD5(str):返回str的MD5哈希值。PASSWORD(str):返回str的加密值(單向加密,不可逆模式)。SHA(str)或SHA1(str):返回str的SHA(或SHA1)哈希值。格式化函數(shù)DATE_FORMAT(date,fmt):依照字符串fmt格式化日期date值。TIME_FORMAT(time,fmt):依照字符串fmt格式化時(shí)間time值。FORMAT(x,y):把x格式化為以逗號(hào)隔開的數(shù)字序列,y是結(jié)果的小數(shù)位數(shù)。INET_ATON(ip):返回IP地址的數(shù)字表示。INET_NTOA(num):返回?cái)?shù)字所代表的IP地址。格式化函數(shù)-日期格式格式:描述%a:縮寫星期名%b:縮寫月名%c:月,數(shù)值%D:帶有英文前綴的月中的天%d:月的天,數(shù)值(00-31)%e:月的天,數(shù)值(0-31)%f:微秒%H:小時(shí)(00-23)%h:小時(shí)(01-12)%I:小時(shí)(01-12)%i:分鐘,數(shù)值(00-59)%j:年的天(001-366)%k:小時(shí)(0-23)格式:描述%M:月名%m:月,數(shù)值(00-12)%p:AM或PM%r:時(shí)間,12-小時(shí)(hh:mm:ssAM或PM)%S:秒(00-59)%s:秒(00-59)%T:時(shí)間,24-小時(shí)(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位常用函數(shù)的使用(1):/*數(shù)學(xué)函數(shù)*/selectABS(-10);/*輸出10*/selectBIN(3);/*輸出11*/selectpi();/*輸出圓周率值*/selectround(4.5,0);/*輸出5*/selectrand();/*輸出(0,1)之間的隨機(jī)數(shù)*/selecttruncate(1.2389,2);/*輸出1.23*/實(shí)例7-15常用函數(shù)的使用(2):/*字符串函數(shù)(1)*/selectASCII('a');/*輸出97*/selectinsert('abc',2,1,'ee');/*輸出aeec*/selectlcase('ABC');/*輸出ab*/selectucase('abc');/*輸出ABC*/selectleft('abc',2);/*輸出ab*/selectright('abc',2);/*輸出bc*/selectucase('abc');/*輸出ABC*/selectlength('abc');/*輸出3*/selectlength('漢字');/*輸
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 城市河道清淤施工方案
- 工地施工勞務(wù)用工合同
- 土地出讓合同補(bǔ)充協(xié)議
- 霓虹燈施工方案
- 合金網(wǎng)兜施工方案
- 配電線路施工方案
- 南通輕質(zhì)混凝土施工方案
- 塑料管卡箍連接施工方案
- 臨朐立柱宣傳欄施工方案
- 建筑工程勞務(wù)用工協(xié)議
- 2025年合肥職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫及參考答案
- (2025春新教材)人教版七年級(jí)英語下冊(cè)全冊(cè)教案
- 天津2025年天津市機(jī)關(guān)后勤事務(wù)服務(wù)中心招聘6人筆試歷年參考題庫附帶答案詳解
- 人教版小學(xué)三年級(jí)數(shù)學(xué)下冊(cè)筆算練習(xí)題
- 山東黃河河務(wù)局公開招考2025高校畢業(yè)生易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- XX電站接地裝置的熱穩(wěn)定校驗(yàn)報(bào)告(220kV)
- 麗聲北極星分級(jí)繪本第三級(jí)上-Zob-Is-Bored
- 鐵路信號(hào)基礎(chǔ)(第四版) 課件全套 林瑜筠 第1-6章 信號(hào)繼電器 -鐵路信號(hào)系統(tǒng)概述
- 2025年度住宅小區(qū)水電改造與維修一體化服務(wù)合同4篇
- 中學(xué)生保護(hù)眼睛預(yù)防近視
- 古往今來數(shù)學(xué)家的奇聞?shì)W事
評(píng)論
0/150
提交評(píng)論