




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第2章數(shù)據(jù)庫中的數(shù)據(jù)元素2.1數(shù)據(jù)的類型
2.2常量與變量
2.3表達式
2.4常用函數(shù)
2.1數(shù)?據(jù)?的?類?型
常用的數(shù)據(jù)類型有數(shù)值型、字符型、日期時間型和邏輯型。
1.數(shù)值型
由數(shù)字組成的數(shù)據(jù),用來定量表示一個對象的大小,由正、負號及0~9的數(shù)字構成。在數(shù)據(jù)庫中對于數(shù)值型的數(shù)據(jù)又分為一般的數(shù)字型數(shù)據(jù)和貨幣型數(shù)據(jù)。
2.字符型
由字符組成的字符串數(shù)據(jù),用來描述一個對象的各種信息,所用的字符有漢字、數(shù)字、字母及各種字符。
3.日期時間型
由數(shù)字和“-”或“/”組成的數(shù)據(jù),用來表示日期中的年、月、日,所用的數(shù)字有8位或10位的;由數(shù)字和“:”組成,用來表示時間中的小時、分、秒。
4.邏輯型
由字符構成的數(shù)據(jù),用來表示一件事情是成立(真),還是不成立(假)。
2.2常?量?與?變?量
2.2.1常量
1.數(shù)值型常量(N)
數(shù)值型常量就是用數(shù)字0~9組成,并且可以帶正、負號的數(shù)據(jù),又稱常數(shù)。數(shù)值型常量又分為:
(1)整型,不含小數(shù)點的數(shù)字,如289,2006等。
(2)實型,含小數(shù)點的數(shù)字,如289.6,2006.5等。實型又分基本型和科學記數(shù)法型:
基本型就是由正負號、整數(shù)、小數(shù)點和小數(shù)后等四部分組成;
科學記數(shù)就是在基本型后帶指數(shù),用e或E表示。
2.字符型常量(C)
字符型常量就是用引號括起來的各種字符組成的數(shù)據(jù),又稱字符串。字符運算的結果還是字符串。引號有三種:單引號“'?”、雙引號“"”和中括號“[]”。而字符常量又分為:
(1)字符型字符,由純字符或和數(shù)字混合組成。字符不能轉換。
(2)數(shù)字型字符,由純數(shù)字組成。數(shù)字型字符可以用VAL()函數(shù)轉換成數(shù)字,。
(3)日期型字符,由數(shù)字和“/”或“-”組成。日期型字符可以用函數(shù)CTOD()轉換成日期,但其中的字符必須是有效的日期。
3.日期型常量(D)
日期型常量就是用一對花括號括起來的由數(shù)字組成,具有固定的格式,用來表示日期的數(shù)據(jù)。年、月、日之間有分隔符,分隔符有“/”、“-”和“.”三種,同時年、月、日之間的順序還取決于設置。日期常量的格式有以下兩種:
傳統(tǒng)的日期格式采用的是美國日期格式,而且只能在SETSTRICTDATETO0的狀態(tài)下,及SETDATEMDY格式下使用。其格式為“月/日/年”,其中月和日各是2位數(shù)字,而年可以是2位或4位數(shù)字。
嚴格的日期格式能夠確切表示一個日期。其格式為“年/月/日”,其中年用4位數(shù)字,月和日用2位數(shù)字表示,并且在年的前邊加一個脫字符“^”。日期的格式可以進行設置,這里的設置主要是日期執(zhí)行后顯示結果的格式。影響格式的有多種因素,設置的方法可以在“選項”對話框中設置,也可以用命令設置。
(1)設置年、月、日之間的分隔符。
命令設置:SETMARKTO[分隔符],分隔符必須加引號,若省去,則默認為“/”;
對話框設置:工具/選項/區(qū)域,如圖2.1所示,然后在“日期分隔符”前打對勾,再輸入符號。
(2)設置日期的格式。
命令設置:SETDATE[TO]AMERICAN|ANSI|MYD|DMY|YMD,共13種,系統(tǒng)默認AMERICAN;
對話框設置:工具/選項/區(qū)域,如圖2.1所示,然后單擊“日期格式”后的下拉按鈕選擇。圖2.1日期格式設置
(3)設置年份顯示位數(shù)。
命令設置:SETCENTURYON|OFF,其中ON為4位,OFF為2位;
對話框設置:工具/選項/區(qū)域,如圖2.1所示,然后在“年份”前打對勾,表示4位,沒有對勾表示2位。
(4)設置日期格式的檢查。
命令設置:SETSTRICTDATETO[0|1|2],0、1和2的含義可以通過對話框了解;
對話框設置:工具/選項/常規(guī),然后在“2000兼容性”中的“嚴格日期格式”中選擇。
4.邏輯型常量(L)
邏輯型常量只有兩個值,一個是邏輯真,另一個是邏輯假,用來作為條件使用。真的表示有.t.、.T.、.y.和.Y.;假的表示有.f.、.F.、.n.和.N.。其中,值兩邊的點不能省略,否則會誤認為變量名。2.2.2變量
1.變量的分類
變量的分類有兩種方法。
1)按存儲的地方劃分
內(nèi)存變量在內(nèi)存中的變量,也就是說在使用過程中,它一直在內(nèi)存中,一旦退出系統(tǒng),VisualFoxPro會將它自動釋放。如x=90,在使用x時,它有值,一旦退出,再進入系統(tǒng),x就不存在了。
字段變量其存儲隨著表文件的保存而保存的。也就是說,字段變量就是表的結構,在使用時隨著表文件的打開而讀入內(nèi)存,并隨著表文件的關閉而保存到磁盤(外存儲器)上,退出系統(tǒng)也會存在。
2)按變量中的值劃分
不管是內(nèi)存變量還是字段變量都有各自的類型。字段變量的類型是隨著定義表結構而確定的,它的類型及定義方法在后邊的章節(jié)再討論。內(nèi)存變量的類型不像常量那樣,由值本身就可以看出它的類型,內(nèi)存變量的類型是隨著給它賦的值的類型而確定的。內(nèi)存變量的常用類型有字符型(C)、數(shù)值型(N)、日期型(D)和邏輯型(L),當然還有其它一些類型。
2.變量的命名
變量必須有一個名字,這樣計算機才可以給它分配內(nèi)存,然后再通過變量名訪問變量。變量命名可以由漢字、數(shù)字、字母和下劃線組成,但不能用數(shù)字開頭,如xyz、x_y、xy12、_xy、姓名、年齡等都對,而12xy就錯了。字段變量的取名是在定義表結構時進行的,它的值是當前記錄對應字段的值;內(nèi)存變量的取名是在給變量賦值時進行的,它的值及類型都是由賦的值來決定的。
3.內(nèi)存變量的分類
按使用的形式,內(nèi)存變量又分成兩種:一種是簡單變量;另一種是數(shù)組。
1)簡單變量
每一個變量都有一個名字,通過名字訪問變量的值。如果內(nèi)存變量與字段變量同名(當前已打開的一個表),且要使用內(nèi)存變量,則必須在名字前加“M.”或“M->”符號,否則系統(tǒng)默認是在使用字段變量。例如,若在命令窗口執(zhí)行姓名=“張三”(給姓名變量賦值為張三),而字段變量中也有一個字段名為姓名,那么執(zhí)行“?姓名”,系統(tǒng)則默認是字段的值,而要顯示值為“張三”,則必須在姓名前加“M.”或“M->”符號。
2)數(shù)組
數(shù)組就是一個數(shù)據(jù)序列,或者是給一串數(shù)取一個名字。這樣做的目的是使用方便,便于編寫程序等。數(shù)組中的每個數(shù)叫元素,每個元素的類型還可以不同,每個元素相當于一個簡單變量。
與簡單變量不同的是,簡單變量在賦值之前不用說明(或稱定義),而數(shù)組在使用之前一般要進行說明或定義(數(shù)組與表之間數(shù)據(jù)傳遞時可以不說明)。
對于數(shù)組,其賦值和使用與簡單內(nèi)存變量是有區(qū)別的,而其它的有關操作則與簡單內(nèi)存變量相同。另外,數(shù)組有一維數(shù)組、二維數(shù)組和多維數(shù)組之分。數(shù)組的定義格式:
DIMENSION數(shù)組名(d1[,d2])[,...]
DECLARE數(shù)組名(d1[,d2])[,...]
其中,數(shù)組名的取法與簡單內(nèi)存變量相同。括號中有幾個d就表示是幾維,每個d必須有具體的值,每一維的下限是1,上限是d的值。數(shù)組的元素個數(shù)就是維數(shù)長度的乘積,若是一維就是d個,若是二維就是d1×d2個。剛定義的數(shù)組每個元素的值是邏輯假,即.F.。
例2.1
在命令窗口執(zhí)行:
DIMEX(5),Y(3,4)
該命令說明定義了兩個數(shù)組:一個是一維數(shù)組X,其中有5個元素,另一個是二維數(shù)組Y,其中有12個元素,每個元素的初始值都是.F.。
X的元素是:X(1)X(2)X(3)X(4)X(5)。
Y的元素是:Y(1,1)Y(1,2)Y(1,3)Y(1,4)
Y(2,1)Y(2,2)Y(2,3)Y(2,4)
Y(3,1)Y(3,2)Y(3,3)Y(3,4)
數(shù)組Y可以看成3行4列,而在計算機的內(nèi)存中則是連續(xù)的12個存儲單元。2.2.3內(nèi)存變量的操作
1.內(nèi)存變量的賦值
內(nèi)存變量的賦值有兩種格式。
(1)命令格式1:
V=e
命令格式1的功能是先求表達式的值,然后將表達式的值賦給左邊的變量,即將表達式的值放到變量所指的內(nèi)存單元中。
(2)命令格式2:
STOREetov1,v2,…
命令格式2的功能是先求表達式的值,然后將表達式的值同時賦給多個變量。
2.內(nèi)存變量值的輸出
內(nèi)存變量值的輸出有兩種。
(1)命令格式1:
DISPLAYMEMOERY[LIKE*|?][TOPRINTER|TOFILE文件名]
LISTMEMOERY[LIKE*|?][TOPRINTER|TOFILE文件名]
其中,DISPLAY、MEMOERY和LISTMEMOERY都是名字關鍵字;[]中的都是可選項。
命令格式1的功能是將內(nèi)存中的所有內(nèi)存變量或指定的內(nèi)存變量輸出。輸出的內(nèi)容有變量名、屬性(作用域)、類型和值。
(2)命令格式2:
?變量名表
??變量名表
其中,變量名之間用逗號分開,也可以是表達式。
命令格式2的功能是將變量的值在屏幕上顯示出來。
3.內(nèi)存變量的清除
內(nèi)存變量可以定義,也可以清除,方法有多種。
(1)清除全部內(nèi)存變量,其命令格式:
CLEARMEMORY
RELEASEALL
該命令的功能是將內(nèi)存中的變量清除掉(只是用戶自己定義的變量,不包含系統(tǒng)的)。
(2)清除部分內(nèi)存變量,其命令格式為:
RELEASEALL[LIKE<通配符>|EXCEP<通配符>]
其中,通配符的解釋同上;可選項LIKE清除與通配符一樣名字的變量;EXCEP清除與通配符不一樣的內(nèi)存變量。
該命令的功能是將當前內(nèi)存中指定的變量清除。若不選可選項,則與清除全部內(nèi)存變量的格式功能相同。
4.數(shù)組的特殊用法
數(shù)組除與簡單變量使用方法部分相同之外,還有一種很有用的使用方法,就是數(shù)組可以與表記錄之間進行數(shù)據(jù)傳遞。一個二維表實質是記錄(行)的集合,而數(shù)組又是把一個數(shù)據(jù)序列作為整體進行處理。也就是說,表記錄中的數(shù)據(jù)可以和一個數(shù)組進行相互之間的數(shù)據(jù)傳遞。
(1)將表的當前記錄復制到數(shù)組中,其命令格式為為:
SCATTER[FIELDS<字段名表>][MEMO]TO數(shù)組名[BLANK]
SCATTER[FIELDSLIKE<通配符>|EXCEPT<通配符>][MEMO]TO數(shù)組名[BLANK]
例2.2
在命令窗口執(zhí)行以下命令。
USEJBQK
SCATTTOX&&將1號記錄中除過M和G字段的內(nèi)容復制到X數(shù)組中
SCATTFIEL編號,姓名,基本工資TOY &&將1號記錄中3個字段的值復制到Y中
SCATTFIEL姓名,基本工資TOZBLANK &&將生成有2個元素的Z數(shù)組,第一個元素是C型,第二個元素是N型
DISPMEMOLIKE*&&顯示當前內(nèi)存中定義所有數(shù)組的元素
(2)將數(shù)組中的值復制到表的當前記錄中,其命令格式為:
GATHERFROM???數(shù)組名[FIELDS<字段名表>][MEMO]
GATHERFROM????數(shù)組名[FIELDSLIKE<通配符>|EXCEPT<通配符>][MEMO]
其中,數(shù)組名是已定義了的數(shù)組;通配符LIKE和EXCEPT的解釋同上。
該命令的功能是將指定數(shù)組中元素的值復制到當前記錄對應的字段中,使字段中原來的值被覆蓋。若省去FIELDS,記錄中所有字段依次把數(shù)組元素的值復制;若元素的個數(shù)多于字段的格式,多余的舍去;若字段的個數(shù)多于元素的個數(shù),多余字段還是原來的值。
例2.3
在命令窗口執(zhí)行以下命令。
DIMEXY(3)
XY(1)="張超"
XY(2)={^1983/09/18}
XY(3)=2000.3
USEJBQK &&打開“JBQK”表
APPEBLAN &&追加一條空記錄
GATHFROMXYFIEL姓名,出生年,月基本工資
DISP&&顯示當前記錄
例2.4
在命令窗口執(zhí)行DOJHJL。
程序如下(N號和M號記錄交換):
CLEAR
ACCE"輸入一個表名"TOBM
USE&BM
INPU"輸入要交換的第一個記錄號"TON
INPU"輸入要交換的第二個記錄號"TOM
GOTON
SCATTOX
GOTOM
SCATTOY
GATHFROMX
GOTON
GATHFROMY
LIST
USE
2.3表達式
2.3.1算術型運算符及表達式
由算術型的運算符和算術型的操作數(shù)組成的式子叫算術型表達式,該表達式求出的值是一個數(shù)字。
1.算術運算符
表2.1列舉了各算術運算符及其運算級別。表2.1算術運算符及運算級別
例2.5
在命令窗口中執(zhí)行以下命令。
X=16
?X+20*10/SQRT(X) &&結果為66
?3+2^3 &&結果為11
?5%2+100 &&結果為101
?(X+14)/(X-6) &&結果為3
?2^3**2 &&結果為64,要想得到512就應該用括號
?50%-20 &&結果為-10
2.算術表達式
算術運算與我們數(shù)學中的運算基本相同。但對于“%”,在數(shù)學中沒有這個運算符,設X和Y,那么X%Y就是求X除以Y的余數(shù),而結果的正負號取決于Y的符號,“%”的實質與MOD(X,Y)求余函數(shù)的功能相同。X除以Y的余數(shù)等于公式X-Y*FLOOR(X/Y),其中FLOOR是取不超過X除以Y的最大整數(shù)。如?5%-2結果為-1,等于5+2*(-3),因為不超過-2.5的最大整數(shù)是-3。2.3.2字符運算符及表達式
由字符型運算符和字符串組成的式子叫字符表達式,字符表達式運算的結果還是一個字符串。
1.字符運算符
字符運算符只有兩個:
(1)“+”,將兩邊的字符串原樣連接生成一個新的字符串。
(2)“-”,兩邊連接時,將左邊字符尾部的空格放到整個字符串的尾部。
它們的級別是同等的。
例2.6
在命令窗口執(zhí)行以下命令:
?"ABCD"+'CDEF' &結果為ABCDCDEF
?"張三"+"同志" &&結果為張三同志
?"ABC"-"CDE"+"123" &&結果為ABCCDE123
USEJBQK
GOTO1
?姓名-"是"-性別-"的" &&結果為陳紅是女的,把姓名和性別字段中多余的空格都放在字符串的后邊了
2.字符表達式
字符表達式的運算就是一種字符串連接運算,運算的結果是一個新的字符串。在程序設計中經(jīng)常要用到連接字符串的運算。對于“-”運算,要與以后我們學到的函數(shù)TRIM()區(qū)別,前者生成新的字符串的字符個數(shù)沒有變,而后者字符個數(shù)則減少了。
例2.7
在命令窗口執(zhí)行以下命令。
?"ABC└┘"-"DEF" &&結果還是7個字符
?TRIM("ABC└┘")+"DEF" &&結果是6個字符2.3.3日期型運算符及表達式
由日期運算符和日期型或數(shù)字操作數(shù)組成的式子叫日期型表達式,日期型表達式運算的結果要么是一個新的日期,要么是一個數(shù)。
1.日期運算符
對于日期型運算符,實質是借用算術運算中的“+”和“-”,它們的用法取決于兩邊的操作數(shù),操作數(shù)不同運算的結果可能就不同。那么對于“+”和“-”到底屬于日期運算還是算術運算,也要視其兩邊的操作數(shù)而確定。
2.日期型表達式
日期型的運算,有以下幾種:
(1)一個日期可以加或減一個數(shù),得到一個新的日期。如{^2006/01/01}+10,結果是2006年1月11日;若減10,結果為2005年12月22日。
(2)一個數(shù)字可以加一個日期,得到的也是一個新的日期,但一個數(shù)字不能減一個日期。如10+{^2006/01/01},結果還是2006年1月11日。
(3)兩個日期可以相減,得到的是一個數(shù)字,表示兩個日期相差的天數(shù),但兩個日期不能相加。如{^2006/05/30}-{^1980/02/09},結果是9607。
例2.8
在命令窗口執(zhí)行以下命令:
X={^2006/05/01}
Y={^1989/06/04}
?X+20,20+X,X-20 &&前2個結果都為2006年5月21日,后1個結果為2006年4月11日
?X-Y &&結果為6175
?INT((X-Y)/365) &&結果為16,若Y是一個人的生日,則這個人
&&到2006年5月就16周歲了
例2.9
在命令窗口執(zhí)行以下命令:
X={^2012/05/3010:20}
Y={^2006/05/0120:40}
?X+20,X-20 &&結果為05-30-200610:20:2005-30-200610:19:40
?X-Y &&結果為2468400秒
2.3.4關系運算符及表達式
1.關系運算符
表2.2列舉了各關系運算符及其功能。表2.2關?系?運?算?符
例2.10
在命令窗口執(zhí)行以下命令。
X=90
Y="ABCD"
?X>10,X<20,X#100,X=90&&結果為?.T..F..T..T.?,數(shù)字比較
?Y>"ABC","abcd"<Y,Y=="ABCD"&&結果為?.F..T..T,字符比較
?{^2006/01/30}>{^1989/06/04},DATE()>DATE()+2&&結果為?.T..F.,日期比較
?"汽車">"火車","火車"<"輪船"&&結果為?.T..T.,漢字比較
?"AB"$"ABCDE","AB"$"WEACBDF"&&結果為?.T..F.,包含運算
2.關系型表達式
關系運算,實質上是一種比較運算,比較的結果要么成立為“真”,用?.T.?表示;要么不成立為“假”,用?.F.?表示。關系運算一般在命令中作為條件短語,對記錄進行選擇操作,或在程序中作為條件,控制選擇和循環(huán)結構。
例2.11
在程序中可以用以下語句輸出2個數(shù)中的大者。
CLEAR
INPUT"X="TOX
INPUT"Y="TOY
IFX>Y
?X
ELSE
?Y
ENDIF
注意:①對于數(shù)字和日期的比較,直接用它們的值(大小)比較。
②對于字符比較取決于“排序序列”的設置,有三種排序序列法,其設置的方法在“選項”對話框中的“數(shù)據(jù)”選項卡上的“排序序列”處設置,如圖2.2所示。也可以用命令設置,其格式為SETCOLLATETO“排序序列名”。圖2.2排序序列設置③三種排序序列的含義及規(guī)則見表2.3所示,系統(tǒng)默認是“PinYin”。表2.3排序序列的含義
例2.12
在命令窗口執(zhí)行以下命令。
SETCOLLTO"MACHINE"
?"AB"<"ab","A"<"B","0"<"9" &&結果為?.T..T..T.
?"汽車">"火車" &&結果為?.T.
SETCOLLTO"PINYIN"
?"AB"<"ab","A"<"B","0"<"9" &&結果為?.F..T..T
?"汽車">"火車" &&結果為?.T.
SETCOLLTO"STROKE"
?"AB"<"ab","A"<"B","0"<"9" &&結果為?.F..T..T
?"汽車">"火車" &&結果為?.T.
3.字符串的比較方式
字符串的比較是用兩個字符串自左向右逐個進行比較,一旦可以得出結果便結束比較。判斷結果與使用的運算符有關,因此就有精確比較和模糊比較兩種方法,當然也與設置有關,可以在圖2.2中“SETEXACTon”處打對勾來設置,系統(tǒng)默認是OFF狀態(tài)。另外也可以用命令設置,其命令格式為:
SETEXACTON|OFF
(1)在OFF狀態(tài)時(也可以叫模糊比較),字符串比較時只要兩邊字符的第一個匹配,值就為.T.,但需要左長右短(字符個數(shù)),反之還是.F.。
例2.13
在命令窗口執(zhí)行以下命令。
SETEXACOFF
?"ABC"="AB","AB"="ABC" &&結果為.T..F.
?"ABC"=="ABC","ABC"=="AB","AB"=="ABC" &&在OFF狀態(tài)的精確比較,結果為.T..F..F.
USEJBQK &&打開表“JBQK”
LISTFOR姓名="王" &&列出“JBQK”表中所有姓“王”的,若寫成"王"=姓名,找不到滿足條件的
(2)在ON狀態(tài)時(也可以叫精確比較),相當于在OFF狀態(tài)用“==”,此狀態(tài)下兩個字符串要相等,首先要字符個數(shù)一樣,然后再逐個字符比較,若都一樣則為.T.,否則為.F.。
例2.14
在命令窗口執(zhí)行以下命令。
SETEXACON
?"ABC"="ABC","ABC"="AB","AB"="ABC" &&精確比較,結果為?.T..F..F.
USEJBQK
LISTFOR姓名="王軍" &&這時還是沒有滿足條件的,因為姓名字段的寬度至少是6,而“王軍”是4個字符。
LISTFORTRIM(姓名)="王軍" &&TRIM()去掉姓名中尾部的空格,使得兩字符串一樣長,所以就可以找到“王軍”的記錄2.3.5邏輯運算符及表達式
1.邏輯運算符
邏輯運算符有三個,它的功能及運算規(guī)則見表2.4,設表中的A和B均為邏輯型。表2.4邏?輯?運?算?符
2.邏輯表達式
邏輯表達式的運算,就是對操作數(shù)按照運算符的功能進行判斷,其運算結果不是.T.就是.F.。那么在一個邏輯表達式中可能各種運算符都存在,如3+4>5.AND."A"<"a",所以運算就有優(yōu)先順序:算術運算符、字符運算符、日期運算符、關系運算符,最后才是邏輯運算符。另外適當使用圓括號,可以改變運算順序。
例2.15
在命令窗口執(zhí)行以下命令,其中的性別、職稱、婚否均為字段名。
X=50
?X>=20ANDX<=80ORX>100,X<20AND(X<=80ORX>100) &&結果為.T..F.
?NOTX=50 &&結果為.F.
USEJBQK
LISTFOR性別="男"AND職稱="教授" &&列出表中所有男教授的記錄
LISTFOR性別="男"OR職稱="教授" &&列出表中要么是男的,要么是教授的記錄
LISTFORNOT婚否 &&列出表中所有沒有結婚的記錄
LISTFORNOT性別="男"AND職稱="教授" &&列出表中所有女教授的記錄
LISTFORNOT(性別="男"AND職稱="教授")&&列出表中除過男教授的所有記錄
LISTFOR"教授"$職稱 &&列出表中所有的教授和副教授的記錄
2.3.6小結
一個表達式屬于什么類型,取決于運算符,當類型決定了也就決定了表達式值的類型。而一個運算符兩邊的操作數(shù)的類型也很重要,首先要與運算符的類型匹配,其次兩邊的類型也應對應,否則會出現(xiàn)語法錯誤。為了使讀者一目了然,很快掌握,通過表2.5做一總結。表2.5運算符及表達式 2.4常用函數(shù)
對于函數(shù)的學習首先要搞清楚以下幾個概念:
(1)函數(shù)的執(zhí)行結果將得到一個數(shù)據(jù)。
(2)函數(shù)有一到多個參數(shù)(形參和實參),用參數(shù)的目的是為了增加函數(shù)的通用性。
(3)函數(shù)的分類,有兩種分法:
從用戶使用的角度可以分為系統(tǒng)函數(shù)和自定義函數(shù):系統(tǒng)函數(shù)是系統(tǒng)為用戶提供的;自定義函數(shù)是用戶根據(jù)需要自己編制的一段程序。
從函數(shù)的功能及返回值可以分為數(shù)值函數(shù)、字符函數(shù)、日期和時間函數(shù)、測試函數(shù)和類型轉換函數(shù)。
(4)對函數(shù)的使用應該注意以下幾點:
函數(shù)必須帶括號。
函數(shù)的使用像一個數(shù)據(jù),可以作為表達式的操作數(shù)來用。
函數(shù)的形、實參數(shù)必須一一對應(形參決定實參):個數(shù)對應、類型對應和順序對應。
在VisualFoxPro中,系統(tǒng)提供了上百個函數(shù),這里我們根據(jù)需要介紹一些常用的函數(shù)。對于用戶自定義函數(shù),將在程序設計中介紹。2.4.1數(shù)值型函數(shù)
數(shù)值型函數(shù),其參數(shù)一般是數(shù)值型,返回的值一般也是數(shù)值型。
1.取絕對值函數(shù)
命令格式:ABS(N)
參數(shù):N是一個數(shù)值型表達式。
功能:對N求值,然后對表達式的值取絕對值,相當于數(shù)學中的|N|。
3.取整函數(shù)
命令格式:INT(N)
CEILING(N)
FLOOR(N)
參數(shù):N是一個數(shù)值型表達式。
功能:INT(),對N求值,舍去小數(shù)部分,返回整數(shù)部分。
CEILING(),對N求值,返回大于或等于表達式值的最小整數(shù),相當于返回N的右邊第一個整數(shù)。
FLOOR(),對N求值,返回小于或等于表達式值的最大整數(shù),相當于返回N的左邊第一個整數(shù)。
4.四舍五入函數(shù)
命令格式:ROUND(X,N)
參數(shù):X是一個數(shù)值型表達式,N是一個整型表達式。
功能:對X求值,然后對X的值從第N位四舍五入,若N>0,小數(shù)點后第N位四舍五入;若N<0,整數(shù)部分第N位四舍五入。實質上把X的值看做在一個數(shù)軸上,N是以小數(shù)點為界向兩邊數(shù)。
5.求余函數(shù)
命令格式:MOD(X,Y)
參數(shù):X和Y均是數(shù)值型表達式。
功能:求X除以Y的余數(shù),正負號與Y相同。實質與運算符“%”的功能相同,只是前者是函數(shù),后者是運算符。同樣也可以用前邊敘述“%”時的式子計算MOD()的值。
6.求指數(shù)、對數(shù)函數(shù)
命令格式:EXP(X)
LOG(X)
LOG10(X)
參數(shù):X是一個數(shù)值型表達式。
功能:EXP(),計算以e為底的X次冪,相當于數(shù)學中的ex。
LOG(),計算以e為底的自然對數(shù),相當于數(shù)學中的lnx,與EXP()互為逆運算。
LOG10(),計算以10為底的常用對數(shù),相當于數(shù)學中的lgx。
7.圓周率函數(shù)
命令格式:PI()無參函數(shù)。
功能:就是數(shù)學中π的值。
8.求最大、最小函數(shù)
命令格式:MAX(X1,X2[,X3...])
MIN(X1,X2[,X3...])
參數(shù):X1,X2,X3,...是任意型數(shù)據(jù)的表達式,但必須幾個參數(shù)的類型一致,其中的參數(shù)格式至少2個。
功能:MAX(),對多個參數(shù)的值求最大。
MIN(),對多個參數(shù)的值求最小,若是字符型,需符合“排序序列”規(guī)則。2.4.2字符型函數(shù)
字符函數(shù),大多數(shù)的參數(shù)是字符型,個別是數(shù)值型。同樣,函數(shù)的返回值大多數(shù)是字符型,也有個別是數(shù)值型。
1.求字符串長度函數(shù)
命令格式:LEN(C)
參數(shù):C是一個字符表達式。
功能:求出C中的字符個數(shù),返回一個數(shù)字,空格也是一個字符。
2.生成空格字符串函數(shù)
命令格式:SPACE(N)
參數(shù):N是一個數(shù)字表達式。
功能:返回由N個空格組成的字符串。
3.刪除空格函數(shù)
命令格式:TRIM(C)|RTRIM(C)
LTRIM(C)
ALLTRIM(C)
參數(shù):C是一個字符型表達式。
功能:TRIM(),返回刪除C尾部空格后的字符串。
LTRIM(),返回刪除C前邊空格后的字符串。
ALLTRIM(),返回刪除C左、右空格后的字符串。
4.求子串函數(shù)
命令格式:LEFT(C,n)
RIGHT(C,n)
SUBSTR(C,n1[,n2])
參數(shù):C是一個字符型表達式,n、n1和n2是數(shù)字型表達式。其中n和n2表示個數(shù),n1表示起點。
功能:LEFT(),返回C中左邊的n個字符。
RIGHT(),返回C中右邊的n個字符。
SUBSTR(),返回C中從n1開始的n2個字符,若省去n2,則返回從n1開始到C結束的字符;若n2的值大于C剩余字符,也返回從n1開始到C結束的字符。
5.生成重復字符函數(shù)
命令格式:REPLICATE(C,N)
參數(shù):C是一個字符型表達式,N是一個數(shù)字型表達式。
功能:返回把C重復N次的一個字符串,新字符串的字符個數(shù)是C中字符個數(shù)乘以N。
6.求子串位置函數(shù)
命令格式:AT(C1,C2[,n])
ATC(C1,C2[,n])
參數(shù):C1和C2都是字符型表達式,C1可以看成子串,n是一個數(shù)字表達式。
功能:AT(?),判斷C1是否在C2中,若不在則返回0;若在C2中,則返回C1在C2中的起始位置。n表示C1在C2中是第n次出現(xiàn)的,若省去,默認為第一次。ATC()與AT()功能基本相同,區(qū)別ACT()不區(qū)分字母大小寫,而AT()要區(qū)分大小寫。
7.計算子串出現(xiàn)次數(shù)函數(shù)
命令格式:OCCURS(C1,C2)
參數(shù):C1和C2都是字符型表達式,C1可以看成子串。
功能:返回C1在C2中出現(xiàn)的次數(shù),得到一個數(shù)字,若不在C2中,返回0。
8.子串替換函數(shù)
命令格式:STUFF(C1,n1,n2,C2)
參數(shù):C1和C2是字符串,C2可以看成子串,n1和n2都是數(shù)值型,n1表示起點,n2表示被替換的字符個數(shù)。
功能:用C2中的字符,在C1中從n1開始替換n2個字符。C2中字符個數(shù)可以與n2不同,若n2為0,表示插入C2字符串;若C2為空,表示刪除n2個字符。
9.字符替換函數(shù)
命令格式:CHRTRAN(C1,C2,C3)
參數(shù):C1、C2、C3均是字符串,C2和C3可以看成子字符串。
功能:當C1中的一個或多個字符與C2中的某個字符相匹配時,就用C3中對應位置字符替換這些字符。若C3中字符個數(shù)少于C2中字符個數(shù),那么將C1中相匹配的字符刪除;若C3中字符個數(shù)多于C2中字符個數(shù),則多余的字符被忽略。2.4.3日期和時間型函數(shù)
1.系統(tǒng)日期和時間函數(shù)
命令格式:DATE()
TIME()
DATETIME()
參數(shù):上述三個函數(shù)均是無參函數(shù)。
功能:DATE(),返回系統(tǒng)當前的日期(D),日期格式取決于設置,系統(tǒng)默認是“美語”式。
TIME(),返回系統(tǒng)當前的時間,格式為小時:分:秒,是一個字符串(C)。
DATETIME(),返回系統(tǒng)當前的日期和時間,是日期時間型(T)。
2.求年、月、日函數(shù)
命令格式:YEAR(D)
MONTH(D)
DAY(D)
參數(shù):D是一個日期型表達式。
功能:YEAR(),從日期中返回對應的年,得到一個數(shù)字。
MONTH(),從日期中返回對應的月,得到一個數(shù)字。
DAY(),從日期中返回對應月的日期,得到一個數(shù)字。
3.求星期函數(shù)
命令格式:DOW(D)
CDOW(D)
參數(shù):D是一個日期型表達式。
功能:DOW(),從日期中返回對應的星期幾,得到一個1~7中的數(shù)字,星期日是1。
CDOW(),從日期中返回對應星期的英文名字。
4.求時、分、秒函數(shù)
命令格式:HOUR(T)
MINUTE(T)
SEC(T)
參數(shù):T是一個日期時間型表達式。
功能:HOUR(),從T中返回對應的小時,得到一個數(shù)字(0~23)。
MINUTE(),從T中返回對應的分鐘,得到一個數(shù)字(0~59)。
SEC(),從T中返回對應的秒,得到一個數(shù)字(0~59)。2.4.4測試類函數(shù)
1.表文件記錄測試函數(shù)
表文件記錄測試函數(shù)與表文件的操作及當前記錄有關,在某一時刻對一個表的當前記錄只有一個,把它叫記錄指針,或記錄指針是一個當前記錄號。對于記錄指針的其它概念在記錄指針移動一節(jié)再做詳述。
命令格式:BOF([n])
EOF([n])
參數(shù):n是一個數(shù)字表達式,指該表所在的工作區(qū)的區(qū)號,若省去,表示當前區(qū)。
功能:BOF(?),測試指定工作區(qū)中表文件的記錄指針是否在文件頭,若在,返回邏輯值.T.,否則返回邏輯值.F.。
EOF(?),測試指定工作區(qū)中表文件的記錄指針是否在文件尾,若在,返回邏輯值.T.,否則返回邏輯值.F.。
2.表當前記錄測試函數(shù)
命令格式:RECNO([n])
參數(shù):n是一個數(shù)字表達式,指該表所在的工作區(qū)的區(qū)號,若省去,表示當前區(qū)。
功能:返回指定區(qū)中表的當前記錄號,是一個數(shù)字。若指定區(qū)中無表打開,返回值為0。系統(tǒng)規(guī)定,文件頭的記錄號為1,文件尾的記錄號是表中記錄個數(shù)加1。
3.表記錄個數(shù)測試函數(shù)
命令格式:RCCCOUNT([n])
參數(shù):n是一個數(shù)字表達式,指該表所在的工作區(qū)的區(qū)號,若省去,表示當前區(qū)。
功能:返回指定區(qū)中表的記錄個數(shù),是一個數(shù)字。若指定區(qū)中無表打開,返回值為0。返回的記錄個數(shù)是物理存在的個數(shù),與是否有邏輯刪除的記錄無關。
4.記錄刪除測試
命令格式:DELETED([n])
參數(shù):n是一個數(shù)字表達式,指該表所在的工作區(qū)的區(qū)號,若省去,表示當前區(qū)。
功能:測試指定區(qū)中表的當前記錄是否被邏輯刪除(有無刪除標記“*”),返回一個邏輯值,若刪除則為.T.,否則為.F.。
5.值域測試函數(shù)
命令格式:BETWEEN(e,e1,e2)
參數(shù):e,e1,e2是任意型表達式,但三個的類型必須統(tǒng)一。
功能:判斷e是否在e1和e2之間,返回一個邏輯值,若是為.T.,若不是為.F.。相當于判斷數(shù)學中的e1≤e≤e2是否成立。
6.空值測試函數(shù)
命令格式:ISNULL(X)
參數(shù):X是一個變量或是一個字段名字。
功能:判斷X的值是否為空值(NULL)(空值也是一個值),返回一個邏輯值,若是NULL值為.T.,否則為.F.。一般在用于測試一個字段中的值是否為空值(對應字段允許輸入NULL值)。
7.“空”值測試函數(shù)
命令格式:EMPTY(e)
參數(shù):e是一個任意型表達式。
功能:測試e的值是否“空”,返回一個邏輯值,若是真為.T.,若是假為.F.。
注意:此處的“空”與上邊空值是有區(qū)別的,空值是一種值,而“空”對于不同類型的數(shù)據(jù)有不同的規(guī)定,如表2.6所示。表2.6不同類型“空”的規(guī)定
8.數(shù)據(jù)類型測試函數(shù)
命令格式:VAR
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 物業(yè)租賃管理合同協(xié)議
- 專柜裝修合同裝修合同協(xié)議
- 房屋轉讓協(xié)議合同書
- 聘請勞務合同
- 安置房買賣協(xié)議合同
- 小學六英語試卷答案
- 賣魚銷售合同范本
- 個人一周工作計劃
- 冷凍品供貨合同范本
- 三年級下冊音樂教案
- 玫瑰復合蘋果醬的制作工藝研究
- 通宣理肺丸(修訂版)
- 掌握團隊合作的基本原則
- 《水稻病蟲害及防治》課件
- 藥品網(wǎng)絡銷售監(jiān)督管理辦法培訓
- 《動物細胞工程制藥》課件
- 本校教材選用組織機構及職責-選用程序及要求
- 材料供應履約信用證明:免修版模板范本
- 門式起重機、架橋機作業(yè)前安全隱患排查表
- 不合格品處置記錄表(標準版)
- 德語現(xiàn)代主義文學-浙江大學中國大學mooc課后章節(jié)答案期末考試題庫2023年
評論
0/150
提交評論