版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第2章數(shù)據(jù)庫中的數(shù)據(jù)元素2.1數(shù)據(jù)的類型
2.2常量與變量
2.3表達(dá)式
2.4常用函數(shù)
2.1數(shù)?據(jù)?的?類?型
常用的數(shù)據(jù)類型有數(shù)值型、字符型、日期時(shí)間型和邏輯型。
1.數(shù)值型
由數(shù)字組成的數(shù)據(jù),用來定量表示一個(gè)對(duì)象的大小,由正、負(fù)號(hào)及0~9的數(shù)字構(gòu)成。在數(shù)據(jù)庫中對(duì)于數(shù)值型的數(shù)據(jù)又分為一般的數(shù)字型數(shù)據(jù)和貨幣型數(shù)據(jù)。
2.字符型
由字符組成的字符串?dāng)?shù)據(jù),用來描述一個(gè)對(duì)象的各種信息,所用的字符有漢字、數(shù)字、字母及各種字符。
3.日期時(shí)間型
由數(shù)字和“-”或“/”組成的數(shù)據(jù),用來表示日期中的年、月、日,所用的數(shù)字有8位或10位的;由數(shù)字和“:”組成,用來表示時(shí)間中的小時(shí)、分、秒。
4.邏輯型
由字符構(gòu)成的數(shù)據(jù),用來表示一件事情是成立(真),還是不成立(假)。
2.2常?量?與?變?量
2.2.1常量
1.數(shù)值型常量(N)
數(shù)值型常量就是用數(shù)字0~9組成,并且可以帶正、負(fù)號(hào)的數(shù)據(jù),又稱常數(shù)。數(shù)值型常量又分為:
(1)整型,不含小數(shù)點(diǎn)的數(shù)字,如289,2006等。
(2)實(shí)型,含小數(shù)點(diǎn)的數(shù)字,如289.6,2006.5等。實(shí)型又分基本型和科學(xué)記數(shù)法型:
基本型就是由正負(fù)號(hào)、整數(shù)、小數(shù)點(diǎn)和小數(shù)后等四部分組成;
科學(xué)記數(shù)就是在基本型后帶指數(shù),用e或E表示。
2.字符型常量(C)
字符型常量就是用引號(hào)括起來的各種字符組成的數(shù)據(jù),又稱字符串。字符運(yùn)算的結(jié)果還是字符串。引號(hào)有三種:單引號(hào)“'?”、雙引號(hào)“"”和中括號(hào)“[]”。而字符常量又分為:
(1)字符型字符,由純字符或和數(shù)字混合組成。字符不能轉(zhuǎn)換。
(2)數(shù)字型字符,由純數(shù)字組成。數(shù)字型字符可以用VAL()函數(shù)轉(zhuǎn)換成數(shù)字,。
(3)日期型字符,由數(shù)字和“/”或“-”組成。日期型字符可以用函數(shù)CTOD()轉(zhuǎn)換成日期,但其中的字符必須是有效的日期。
3.日期型常量(D)
日期型常量就是用一對(duì)花括號(hào)括起來的由數(shù)字組成,具有固定的格式,用來表示日期的數(shù)據(jù)。年、月、日之間有分隔符,分隔符有“/”、“-”和“.”三種,同時(shí)年、月、日之間的順序還取決于設(shè)置。日期常量的格式有以下兩種:
傳統(tǒng)的日期格式采用的是美國日期格式,而且只能在SETSTRICTDATETO0的狀態(tài)下,及SETDATEMDY格式下使用。其格式為“月/日/年”,其中月和日各是2位數(shù)字,而年可以是2位或4位數(shù)字。
嚴(yán)格的日期格式能夠確切表示一個(gè)日期。其格式為“年/月/日”,其中年用4位數(shù)字,月和日用2位數(shù)字表示,并且在年的前邊加一個(gè)脫字符“^”。日期的格式可以進(jìn)行設(shè)置,這里的設(shè)置主要是日期執(zhí)行后顯示結(jié)果的格式。影響格式的有多種因素,設(shè)置的方法可以在“選項(xiàng)”對(duì)話框中設(shè)置,也可以用命令設(shè)置。
(1)設(shè)置年、月、日之間的分隔符。
命令設(shè)置:SETMARKTO[分隔符],分隔符必須加引號(hào),若省去,則默認(rèn)為“/”;
對(duì)話框設(shè)置:工具/選項(xiàng)/區(qū)域,如圖2.1所示,然后在“日期分隔符”前打?qū)?,再輸入符?hào)。
(2)設(shè)置日期的格式。
命令設(shè)置:SETDATE[TO]AMERICAN|ANSI|MYD|DMY|YMD,共13種,系統(tǒng)默認(rèn)AMERICAN;
對(duì)話框設(shè)置:工具/選項(xiàng)/區(qū)域,如圖2.1所示,然后單擊“日期格式”后的下拉按鈕選擇。圖2.1日期格式設(shè)置
(3)設(shè)置年份顯示位數(shù)。
命令設(shè)置:SETCENTURYON|OFF,其中ON為4位,OFF為2位;
對(duì)話框設(shè)置:工具/選項(xiàng)/區(qū)域,如圖2.1所示,然后在“年份”前打?qū)?,表?位,沒有對(duì)勾表示2位。
(4)設(shè)置日期格式的檢查。
命令設(shè)置:SETSTRICTDATETO[0|1|2],0、1和2的含義可以通過對(duì)話框了解;
對(duì)話框設(shè)置:工具/選項(xiàng)/常規(guī),然后在“2000兼容性”中的“嚴(yán)格日期格式”中選擇。
4.邏輯型常量(L)
邏輯型常量只有兩個(gè)值,一個(gè)是邏輯真,另一個(gè)是邏輯假,用來作為條件使用。真的表示有.t.、.T.、.y.和.Y.;假的表示有.f.、.F.、.n.和.N.。其中,值兩邊的點(diǎn)不能省略,否則會(huì)誤認(rèn)為變量名。2.2.2變量
1.變量的分類
變量的分類有兩種方法。
1)按存儲(chǔ)的地方劃分
內(nèi)存變量在內(nèi)存中的變量,也就是說在使用過程中,它一直在內(nèi)存中,一旦退出系統(tǒng),VisualFoxPro會(huì)將它自動(dòng)釋放。如x=90,在使用x時(shí),它有值,一旦退出,再進(jìn)入系統(tǒng),x就不存在了。
字段變量其存儲(chǔ)隨著表文件的保存而保存的。也就是說,字段變量就是表的結(jié)構(gòu),在使用時(shí)隨著表文件的打開而讀入內(nèi)存,并隨著表文件的關(guān)閉而保存到磁盤(外存儲(chǔ)器)上,退出系統(tǒng)也會(huì)存在。
2)按變量中的值劃分
不管是內(nèi)存變量還是字段變量都有各自的類型。字段變量的類型是隨著定義表結(jié)構(gòu)而確定的,它的類型及定義方法在后邊的章節(jié)再討論。內(nèi)存變量的類型不像常量那樣,由值本身就可以看出它的類型,內(nèi)存變量的類型是隨著給它賦的值的類型而確定的。內(nèi)存變量的常用類型有字符型(C)、數(shù)值型(N)、日期型(D)和邏輯型(L),當(dāng)然還有其它一些類型。
2.變量的命名
變量必須有一個(gè)名字,這樣計(jì)算機(jī)才可以給它分配內(nèi)存,然后再通過變量名訪問變量。變量命名可以由漢字、數(shù)字、字母和下劃線組成,但不能用數(shù)字開頭,如xyz、x_y、xy12、_xy、姓名、年齡等都對(duì),而12xy就錯(cuò)了。字段變量的取名是在定義表結(jié)構(gòu)時(shí)進(jìn)行的,它的值是當(dāng)前記錄對(duì)應(yīng)字段的值;內(nèi)存變量的取名是在給變量賦值時(shí)進(jìn)行的,它的值及類型都是由賦的值來決定的。
3.內(nèi)存變量的分類
按使用的形式,內(nèi)存變量又分成兩種:一種是簡單變量;另一種是數(shù)組。
1)簡單變量
每一個(gè)變量都有一個(gè)名字,通過名字訪問變量的值。如果內(nèi)存變量與字段變量同名(當(dāng)前已打開的一個(gè)表),且要使用內(nèi)存變量,則必須在名字前加“M.”或“M->”符號(hào),否則系統(tǒng)默認(rèn)是在使用字段變量。例如,若在命令窗口執(zhí)行姓名=“張三”(給姓名變量賦值為張三),而字段變量中也有一個(gè)字段名為姓名,那么執(zhí)行“?姓名”,系統(tǒng)則默認(rèn)是字段的值,而要顯示值為“張三”,則必須在姓名前加“M.”或“M->”符號(hào)。
2)數(shù)組
數(shù)組就是一個(gè)數(shù)據(jù)序列,或者是給一串?dāng)?shù)取一個(gè)名字。這樣做的目的是使用方便,便于編寫程序等。數(shù)組中的每個(gè)數(shù)叫元素,每個(gè)元素的類型還可以不同,每個(gè)元素相當(dāng)于一個(gè)簡單變量。
與簡單變量不同的是,簡單變量在賦值之前不用說明(或稱定義),而數(shù)組在使用之前一般要進(jìn)行說明或定義(數(shù)組與表之間數(shù)據(jù)傳遞時(shí)可以不說明)。
對(duì)于數(shù)組,其賦值和使用與簡單內(nèi)存變量是有區(qū)別的,而其它的有關(guān)操作則與簡單內(nèi)存變量相同。另外,數(shù)組有一維數(shù)組、二維數(shù)組和多維數(shù)組之分。數(shù)組的定義格式:
DIMENSION數(shù)組名(d1[,d2])[,...]
DECLARE數(shù)組名(d1[,d2])[,...]
其中,數(shù)組名的取法與簡單內(nèi)存變量相同。括號(hào)中有幾個(gè)d就表示是幾維,每個(gè)d必須有具體的值,每一維的下限是1,上限是d的值。數(shù)組的元素個(gè)數(shù)就是維數(shù)長度的乘積,若是一維就是d個(gè),若是二維就是d1×d2個(gè)。剛定義的數(shù)組每個(gè)元素的值是邏輯假,即.F.。
例2.1
在命令窗口執(zhí)行:
DIMEX(5),Y(3,4)
該命令說明定義了兩個(gè)數(shù)組:一個(gè)是一維數(shù)組X,其中有5個(gè)元素,另一個(gè)是二維數(shù)組Y,其中有12個(gè)元素,每個(gè)元素的初始值都是.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列,而在計(jì)算機(jī)的內(nèi)存中則是連續(xù)的12個(gè)存儲(chǔ)單元。2.2.3內(nèi)存變量的操作
1.內(nèi)存變量的賦值
內(nèi)存變量的賦值有兩種格式。
(1)命令格式1:
V=e
命令格式1的功能是先求表達(dá)式的值,然后將表達(dá)式的值賦給左邊的變量,即將表達(dá)式的值放到變量所指的內(nèi)存單元中。
(2)命令格式2:
STOREetov1,v2,…
命令格式2的功能是先求表達(dá)式的值,然后將表達(dá)式的值同時(shí)賦給多個(gè)變量。
2.內(nèi)存變量值的輸出
內(nèi)存變量值的輸出有兩種。
(1)命令格式1:
DISPLAYMEMOERY[LIKE*|?][TOPRINTER|TOFILE文件名]
LISTMEMOERY[LIKE*|?][TOPRINTER|TOFILE文件名]
其中,DISPLAY、MEMOERY和LISTMEMOERY都是名字關(guān)鍵字;[]中的都是可選項(xiàng)。
命令格式1的功能是將內(nèi)存中的所有內(nèi)存變量或指定的內(nèi)存變量輸出。輸出的內(nèi)容有變量名、屬性(作用域)、類型和值。
(2)命令格式2:
?變量名表
??變量名表
其中,變量名之間用逗號(hào)分開,也可以是表達(dá)式。
命令格式2的功能是將變量的值在屏幕上顯示出來。
3.內(nèi)存變量的清除
內(nèi)存變量可以定義,也可以清除,方法有多種。
(1)清除全部內(nèi)存變量,其命令格式:
CLEARMEMORY
RELEASEALL
該命令的功能是將內(nèi)存中的變量清除掉(只是用戶自己定義的變量,不包含系統(tǒng)的)。
(2)清除部分內(nèi)存變量,其命令格式為:
RELEASEALL[LIKE<通配符>|EXCEP<通配符>]
其中,通配符的解釋同上;可選項(xiàng)LIKE清除與通配符一樣名字的變量;EXCEP清除與通配符不一樣的內(nèi)存變量。
該命令的功能是將當(dāng)前內(nèi)存中指定的變量清除。若不選可選項(xiàng),則與清除全部內(nèi)存變量的格式功能相同。
4.數(shù)組的特殊用法
數(shù)組除與簡單變量使用方法部分相同之外,還有一種很有用的使用方法,就是數(shù)組可以與表記錄之間進(jìn)行數(shù)據(jù)傳遞。一個(gè)二維表實(shí)質(zhì)是記錄(行)的集合,而數(shù)組又是把一個(gè)數(shù)據(jù)序列作為整體進(jìn)行處理。也就是說,表記錄中的數(shù)據(jù)可以和一個(gè)數(shù)組進(jìn)行相互之間的數(shù)據(jù)傳遞。
(1)將表的當(dāng)前記錄復(fù)制到數(shù)組中,其命令格式為為:
SCATTER[FIELDS<字段名表>][MEMO]TO數(shù)組名[BLANK]
SCATTER[FIELDSLIKE<通配符>|EXCEPT<通配符>][MEMO]TO數(shù)組名[BLANK]
例2.2
在命令窗口執(zhí)行以下命令。
USEJBQK
SCATTTOX&&將1號(hào)記錄中除過M和G字段的內(nèi)容復(fù)制到X數(shù)組中
SCATTFIEL編號(hào),姓名,基本工資TOY &&將1號(hào)記錄中3個(gè)字段的值復(fù)制到Y(jié)中
SCATTFIEL姓名,基本工資TOZBLANK &&將生成有2個(gè)元素的Z數(shù)組,第一個(gè)元素是C型,第二個(gè)元素是N型
DISPMEMOLIKE*&&顯示當(dāng)前內(nèi)存中定義所有數(shù)組的元素
(2)將數(shù)組中的值復(fù)制到表的當(dāng)前記錄中,其命令格式為:
GATHERFROM???數(shù)組名[FIELDS<字段名表>][MEMO]
GATHERFROM????數(shù)組名[FIELDSLIKE<通配符>|EXCEPT<通配符>][MEMO]
其中,數(shù)組名是已定義了的數(shù)組;通配符LIKE和EXCEPT的解釋同上。
該命令的功能是將指定數(shù)組中元素的值復(fù)制到當(dāng)前記錄對(duì)應(yīng)的字段中,使字段中原來的值被覆蓋。若省去FIELDS,記錄中所有字段依次把數(shù)組元素的值復(fù)制;若元素的個(gè)數(shù)多于字段的格式,多余的舍去;若字段的個(gè)數(shù)多于元素的個(gè)數(shù),多余字段還是原來的值。
例2.3
在命令窗口執(zhí)行以下命令。
DIMEXY(3)
XY(1)="張超"
XY(2)={^1983/09/18}
XY(3)=2000.3
USEJBQK &&打開“JBQK”表
APPEBLAN &&追加一條空記錄
GATHFROMXYFIEL姓名,出生年,月基本工資
DISP&&顯示當(dāng)前記錄
例2.4
在命令窗口執(zhí)行DOJHJL。
程序如下(N號(hào)和M號(hào)記錄交換):
CLEAR
ACCE"輸入一個(gè)表名"TOBM
USE&BM
INPU"輸入要交換的第一個(gè)記錄號(hào)"TON
INPU"輸入要交換的第二個(gè)記錄號(hào)"TOM
GOTON
SCATTOX
GOTOM
SCATTOY
GATHFROMX
GOTON
GATHFROMY
LIST
USE
2.3表達(dá)式
2.3.1算術(shù)型運(yùn)算符及表達(dá)式
由算術(shù)型的運(yùn)算符和算術(shù)型的操作數(shù)組成的式子叫算術(shù)型表達(dá)式,該表達(dá)式求出的值是一個(gè)數(shù)字。
1.算術(shù)運(yùn)算符
表2.1列舉了各算術(shù)運(yùn)算符及其運(yùn)算級(jí)別。表2.1算術(shù)運(yùn)算符及運(yùn)算級(jí)別
例2.5
在命令窗口中執(zhí)行以下命令。
X=16
?X+20*10/SQRT(X) &&結(jié)果為66
?3+2^3 &&結(jié)果為11
?5%2+100 &&結(jié)果為101
?(X+14)/(X-6) &&結(jié)果為3
?2^3**2 &&結(jié)果為64,要想得到512就應(yīng)該用括號(hào)
?50%-20 &&結(jié)果為-10
2.算術(shù)表達(dá)式
算術(shù)運(yùn)算與我們數(shù)學(xué)中的運(yùn)算基本相同。但對(duì)于“%”,在數(shù)學(xué)中沒有這個(gè)運(yùn)算符,設(shè)X和Y,那么X%Y就是求X除以Y的余數(shù),而結(jié)果的正負(fù)號(hào)取決于Y的符號(hào),“%”的實(shí)質(zhì)與MOD(X,Y)求余函數(shù)的功能相同。X除以Y的余數(shù)等于公式X-Y*FLOOR(X/Y),其中FLOOR是取不超過X除以Y的最大整數(shù)。如?5%-2結(jié)果為-1,等于5+2*(-3),因?yàn)椴怀^-2.5的最大整數(shù)是-3。2.3.2字符運(yùn)算符及表達(dá)式
由字符型運(yùn)算符和字符串組成的式子叫字符表達(dá)式,字符表達(dá)式運(yùn)算的結(jié)果還是一個(gè)字符串。
1.字符運(yùn)算符
字符運(yùn)算符只有兩個(gè):
(1)“+”,將兩邊的字符串原樣連接生成一個(gè)新的字符串。
(2)“-”,兩邊連接時(shí),將左邊字符尾部的空格放到整個(gè)字符串的尾部。
它們的級(jí)別是同等的。
例2.6
在命令窗口執(zhí)行以下命令:
?"ABCD"+'CDEF' &結(jié)果為ABCDCDEF
?"張三"+"同志" &&結(jié)果為張三同志
?"ABC"-"CDE"+"123" &&結(jié)果為ABCCDE123
USEJBQK
GOTO1
?姓名-"是"-性別-"的" &&結(jié)果為陳紅是女的,把姓名和性別字段中多余的空格都放在字符串的后邊了
2.字符表達(dá)式
字符表達(dá)式的運(yùn)算就是一種字符串連接運(yùn)算,運(yùn)算的結(jié)果是一個(gè)新的字符串。在程序設(shè)計(jì)中經(jīng)常要用到連接字符串的運(yùn)算。對(duì)于“-”運(yùn)算,要與以后我們學(xué)到的函數(shù)TRIM()區(qū)別,前者生成新的字符串的字符個(gè)數(shù)沒有變,而后者字符個(gè)數(shù)則減少了。
例2.7
在命令窗口執(zhí)行以下命令。
?"ABC└┘"-"DEF" &&結(jié)果還是7個(gè)字符
?TRIM("ABC└┘")+"DEF" &&結(jié)果是6個(gè)字符2.3.3日期型運(yùn)算符及表達(dá)式
由日期運(yùn)算符和日期型或數(shù)字操作數(shù)組成的式子叫日期型表達(dá)式,日期型表達(dá)式運(yùn)算的結(jié)果要么是一個(gè)新的日期,要么是一個(gè)數(shù)。
1.日期運(yùn)算符
對(duì)于日期型運(yùn)算符,實(shí)質(zhì)是借用算術(shù)運(yùn)算中的“+”和“-”,它們的用法取決于兩邊的操作數(shù),操作數(shù)不同運(yùn)算的結(jié)果可能就不同。那么對(duì)于“+”和“-”到底屬于日期運(yùn)算還是算術(shù)運(yùn)算,也要視其兩邊的操作數(shù)而確定。
2.日期型表達(dá)式
日期型的運(yùn)算,有以下幾種:
(1)一個(gè)日期可以加或減一個(gè)數(shù),得到一個(gè)新的日期。如{^2006/01/01}+10,結(jié)果是2006年1月11日;若減10,結(jié)果為2005年12月22日。
(2)一個(gè)數(shù)字可以加一個(gè)日期,得到的也是一個(gè)新的日期,但一個(gè)數(shù)字不能減一個(gè)日期。如10+{^2006/01/01},結(jié)果還是2006年1月11日。
(3)兩個(gè)日期可以相減,得到的是一個(gè)數(shù)字,表示兩個(gè)日期相差的天數(shù),但兩個(gè)日期不能相加。如{^2006/05/30}-{^1980/02/09},結(jié)果是9607。
例2.8
在命令窗口執(zhí)行以下命令:
X={^2006/05/01}
Y={^1989/06/04}
?X+20,20+X,X-20 &&前2個(gè)結(jié)果都為2006年5月21日,后1個(gè)結(jié)果為2006年4月11日
?X-Y &&結(jié)果為6175
?INT((X-Y)/365) &&結(jié)果為16,若Y是一個(gè)人的生日,則這個(gè)人
&&到2006年5月就16周歲了
例2.9
在命令窗口執(zhí)行以下命令:
X={^2012/05/3010:20}
Y={^2006/05/0120:40}
?X+20,X-20 &&結(jié)果為05-30-200610:20:2005-30-200610:19:40
?X-Y &&結(jié)果為2468400秒
2.3.4關(guān)系運(yùn)算符及表達(dá)式
1.關(guān)系運(yùn)算符
表2.2列舉了各關(guān)系運(yùn)算符及其功能。表2.2關(guān)?系?運(yùn)?算?符
例2.10
在命令窗口執(zhí)行以下命令。
X=90
Y="ABCD"
?X>10,X<20,X#100,X=90&&結(jié)果為?.T..F..T..T.?,數(shù)字比較
?Y>"ABC","abcd"<Y,Y=="ABCD"&&結(jié)果為?.F..T..T,字符比較
?{^2006/01/30}>{^1989/06/04},DATE()>DATE()+2&&結(jié)果為?.T..F.,日期比較
?"汽車">"火車","火車"<"輪船"&&結(jié)果為?.T..T.,漢字比較
?"AB"$"ABCDE","AB"$"WEACBDF"&&結(jié)果為?.T..F.,包含運(yùn)算
2.關(guān)系型表達(dá)式
關(guān)系運(yùn)算,實(shí)質(zhì)上是一種比較運(yùn)算,比較的結(jié)果要么成立為“真”,用?.T.?表示;要么不成立為“假”,用?.F.?表示。關(guān)系運(yùn)算一般在命令中作為條件短語,對(duì)記錄進(jìn)行選擇操作,或在程序中作為條件,控制選擇和循環(huán)結(jié)構(gòu)。
例2.11
在程序中可以用以下語句輸出2個(gè)數(shù)中的大者。
CLEAR
INPUT"X="TOX
INPUT"Y="TOY
IFX>Y
?X
ELSE
?Y
ENDIF
注意:①對(duì)于數(shù)字和日期的比較,直接用它們的值(大小)比較。
②對(duì)于字符比較取決于“排序序列”的設(shè)置,有三種排序序列法,其設(shè)置的方法在“選項(xiàng)”對(duì)話框中的“數(shù)據(jù)”選項(xiàng)卡上的“排序序列”處設(shè)置,如圖2.2所示。也可以用命令設(shè)置,其格式為SETCOLLATETO“排序序列名”。圖2.2排序序列設(shè)置③三種排序序列的含義及規(guī)則見表2.3所示,系統(tǒng)默認(rèn)是“PinYin”。表2.3排序序列的含義
例2.12
在命令窗口執(zhí)行以下命令。
SETCOLLTO"MACHINE"
?"AB"<"ab","A"<"B","0"<"9" &&結(jié)果為?.T..T..T.
?"汽車">"火車" &&結(jié)果為?.T.
SETCOLLTO"PINYIN"
?"AB"<"ab","A"<"B","0"<"9" &&結(jié)果為?.F..T..T
?"汽車">"火車" &&結(jié)果為?.T.
SETCOLLTO"STROKE"
?"AB"<"ab","A"<"B","0"<"9" &&結(jié)果為?.F..T..T
?"汽車">"火車" &&結(jié)果為?.T.
3.字符串的比較方式
字符串的比較是用兩個(gè)字符串自左向右逐個(gè)進(jìn)行比較,一旦可以得出結(jié)果便結(jié)束比較。判斷結(jié)果與使用的運(yùn)算符有關(guān),因此就有精確比較和模糊比較兩種方法,當(dāng)然也與設(shè)置有關(guān),可以在圖2.2中“SETEXACTon”處打?qū)磥碓O(shè)置,系統(tǒng)默認(rèn)是OFF狀態(tài)。另外也可以用命令設(shè)置,其命令格式為:
SETEXACTON|OFF
(1)在OFF狀態(tài)時(shí)(也可以叫模糊比較),字符串比較時(shí)只要兩邊字符的第一個(gè)匹配,值就為.T.,但需要左長右短(字符個(gè)數(shù)),反之還是.F.。
例2.13
在命令窗口執(zhí)行以下命令。
SETEXACOFF
?"ABC"="AB","AB"="ABC" &&結(jié)果為.T..F.
?"ABC"=="ABC","ABC"=="AB","AB"=="ABC" &&在OFF狀態(tài)的精確比較,結(jié)果為.T..F..F.
USEJBQK &&打開表“JBQK”
LISTFOR姓名="王" &&列出“JBQK”表中所有姓“王”的,若寫成"王"=姓名,找不到滿足條件的
(2)在ON狀態(tài)時(shí)(也可以叫精確比較),相當(dāng)于在OFF狀態(tài)用“==”,此狀態(tài)下兩個(gè)字符串要相等,首先要字符個(gè)數(shù)一樣,然后再逐個(gè)字符比較,若都一樣則為.T.,否則為.F.。
例2.14
在命令窗口執(zhí)行以下命令。
SETEXACON
?"ABC"="ABC","ABC"="AB","AB"="ABC" &&精確比較,結(jié)果為?.T..F..F.
USEJBQK
LISTFOR姓名="王軍" &&這時(shí)還是沒有滿足條件的,因?yàn)樾彰侄蔚膶挾戎辽偈?,而“王軍”是4個(gè)字符。
LISTFORTRIM(姓名)="王軍" &&TRIM()去掉姓名中尾部的空格,使得兩字符串一樣長,所以就可以找到“王軍”的記錄2.3.5邏輯運(yùn)算符及表達(dá)式
1.邏輯運(yùn)算符
邏輯運(yùn)算符有三個(gè),它的功能及運(yùn)算規(guī)則見表2.4,設(shè)表中的A和B均為邏輯型。表2.4邏?輯?運(yùn)?算?符
2.邏輯表達(dá)式
邏輯表達(dá)式的運(yùn)算,就是對(duì)操作數(shù)按照運(yùn)算符的功能進(jìn)行判斷,其運(yùn)算結(jié)果不是.T.就是.F.。那么在一個(gè)邏輯表達(dá)式中可能各種運(yùn)算符都存在,如3+4>5.AND."A"<"a",所以運(yùn)算就有優(yōu)先順序:算術(shù)運(yùn)算符、字符運(yùn)算符、日期運(yùn)算符、關(guān)系運(yùn)算符,最后才是邏輯運(yùn)算符。另外適當(dāng)使用圓括號(hào),可以改變運(yùn)算順序。
例2.15
在命令窗口執(zhí)行以下命令,其中的性別、職稱、婚否均為字段名。
X=50
?X>=20ANDX<=80ORX>100,X<20AND(X<=80ORX>100) &&結(jié)果為.T..F.
?NOTX=50 &&結(jié)果為.F.
USEJBQK
LISTFOR性別="男"AND職稱="教授" &&列出表中所有男教授的記錄
LISTFOR性別="男"OR職稱="教授" &&列出表中要么是男的,要么是教授的記錄
LISTFORNOT婚否 &&列出表中所有沒有結(jié)婚的記錄
LISTFORNOT性別="男"AND職稱="教授" &&列出表中所有女教授的記錄
LISTFORNOT(性別="男"AND職稱="教授")&&列出表中除過男教授的所有記錄
LISTFOR"教授"$職稱 &&列出表中所有的教授和副教授的記錄
2.3.6小結(jié)
一個(gè)表達(dá)式屬于什么類型,取決于運(yùn)算符,當(dāng)類型決定了也就決定了表達(dá)式值的類型。而一個(gè)運(yùn)算符兩邊的操作數(shù)的類型也很重要,首先要與運(yùn)算符的類型匹配,其次兩邊的類型也應(yīng)對(duì)應(yīng),否則會(huì)出現(xiàn)語法錯(cuò)誤。為了使讀者一目了然,很快掌握,通過表2.5做一總結(jié)。表2.5運(yùn)算符及表達(dá)式 2.4常用函數(shù)
對(duì)于函數(shù)的學(xué)習(xí)首先要搞清楚以下幾個(gè)概念:
(1)函數(shù)的執(zhí)行結(jié)果將得到一個(gè)數(shù)據(jù)。
(2)函數(shù)有一到多個(gè)參數(shù)(形參和實(shí)參),用參數(shù)的目的是為了增加函數(shù)的通用性。
(3)函數(shù)的分類,有兩種分法:
從用戶使用的角度可以分為系統(tǒng)函數(shù)和自定義函數(shù):系統(tǒng)函數(shù)是系統(tǒng)為用戶提供的;自定義函數(shù)是用戶根據(jù)需要自己編制的一段程序。
從函數(shù)的功能及返回值可以分為數(shù)值函數(shù)、字符函數(shù)、日期和時(shí)間函數(shù)、測試函數(shù)和類型轉(zhuǎn)換函數(shù)。
(4)對(duì)函數(shù)的使用應(yīng)該注意以下幾點(diǎn):
函數(shù)必須帶括號(hào)。
函數(shù)的使用像一個(gè)數(shù)據(jù),可以作為表達(dá)式的操作數(shù)來用。
函數(shù)的形、實(shí)參數(shù)必須一一對(duì)應(yīng)(形參決定實(shí)參):個(gè)數(shù)對(duì)應(yīng)、類型對(duì)應(yīng)和順序?qū)?yīng)。
在VisualFoxPro中,系統(tǒng)提供了上百個(gè)函數(shù),這里我們根據(jù)需要介紹一些常用的函數(shù)。對(duì)于用戶自定義函數(shù),將在程序設(shè)計(jì)中介紹。2.4.1數(shù)值型函數(shù)
數(shù)值型函數(shù),其參數(shù)一般是數(shù)值型,返回的值一般也是數(shù)值型。
1.取絕對(duì)值函數(shù)
命令格式:ABS(N)
參數(shù):N是一個(gè)數(shù)值型表達(dá)式。
功能:對(duì)N求值,然后對(duì)表達(dá)式的值取絕對(duì)值,相當(dāng)于數(shù)學(xué)中的|N|。
3.取整函數(shù)
命令格式:INT(N)
CEILING(N)
FLOOR(N)
參數(shù):N是一個(gè)數(shù)值型表達(dá)式。
功能:INT(),對(duì)N求值,舍去小數(shù)部分,返回整數(shù)部分。
CEILING(),對(duì)N求值,返回大于或等于表達(dá)式值的最小整數(shù),相當(dāng)于返回N的右邊第一個(gè)整數(shù)。
FLOOR(),對(duì)N求值,返回小于或等于表達(dá)式值的最大整數(shù),相當(dāng)于返回N的左邊第一個(gè)整數(shù)。
4.四舍五入函數(shù)
命令格式:ROUND(X,N)
參數(shù):X是一個(gè)數(shù)值型表達(dá)式,N是一個(gè)整型表達(dá)式。
功能:對(duì)X求值,然后對(duì)X的值從第N位四舍五入,若N>0,小數(shù)點(diǎn)后第N位四舍五入;若N<0,整數(shù)部分第N位四舍五入。實(shí)質(zhì)上把X的值看做在一個(gè)數(shù)軸上,N是以小數(shù)點(diǎn)為界向兩邊數(shù)。
5.求余函數(shù)
命令格式:MOD(X,Y)
參數(shù):X和Y均是數(shù)值型表達(dá)式。
功能:求X除以Y的余數(shù),正負(fù)號(hào)與Y相同。實(shí)質(zhì)與運(yùn)算符“%”的功能相同,只是前者是函數(shù),后者是運(yùn)算符。同樣也可以用前邊敘述“%”時(shí)的式子計(jì)算MOD()的值。
6.求指數(shù)、對(duì)數(shù)函數(shù)
命令格式:EXP(X)
LOG(X)
LOG10(X)
參數(shù):X是一個(gè)數(shù)值型表達(dá)式。
功能:EXP(),計(jì)算以e為底的X次冪,相當(dāng)于數(shù)學(xué)中的ex。
LOG(),計(jì)算以e為底的自然對(duì)數(shù),相當(dāng)于數(shù)學(xué)中的lnx,與EXP()互為逆運(yùn)算。
LOG10(),計(jì)算以10為底的常用對(duì)數(shù),相當(dāng)于數(shù)學(xué)中的lgx。
7.圓周率函數(shù)
命令格式:PI()無參函數(shù)。
功能:就是數(shù)學(xué)中π的值。
8.求最大、最小函數(shù)
命令格式:MAX(X1,X2[,X3...])
MIN(X1,X2[,X3...])
參數(shù):X1,X2,X3,...是任意型數(shù)據(jù)的表達(dá)式,但必須幾個(gè)參數(shù)的類型一致,其中的參數(shù)格式至少2個(gè)。
功能:MAX(),對(duì)多個(gè)參數(shù)的值求最大。
MIN(),對(duì)多個(gè)參數(shù)的值求最小,若是字符型,需符合“排序序列”規(guī)則。2.4.2字符型函數(shù)
字符函數(shù),大多數(shù)的參數(shù)是字符型,個(gè)別是數(shù)值型。同樣,函數(shù)的返回值大多數(shù)是字符型,也有個(gè)別是數(shù)值型。
1.求字符串長度函數(shù)
命令格式:LEN(C)
參數(shù):C是一個(gè)字符表達(dá)式。
功能:求出C中的字符個(gè)數(shù),返回一個(gè)數(shù)字,空格也是一個(gè)字符。
2.生成空格字符串函數(shù)
命令格式:SPACE(N)
參數(shù):N是一個(gè)數(shù)字表達(dá)式。
功能:返回由N個(gè)空格組成的字符串。
3.刪除空格函數(shù)
命令格式:TRIM(C)|RTRIM(C)
LTRIM(C)
ALLTRIM(C)
參數(shù):C是一個(gè)字符型表達(dá)式。
功能:TRIM(),返回刪除C尾部空格后的字符串。
LTRIM(),返回刪除C前邊空格后的字符串。
ALLTRIM(),返回刪除C左、右空格后的字符串。
4.求子串函數(shù)
命令格式:LEFT(C,n)
RIGHT(C,n)
SUBSTR(C,n1[,n2])
參數(shù):C是一個(gè)字符型表達(dá)式,n、n1和n2是數(shù)字型表達(dá)式。其中n和n2表示個(gè)數(shù),n1表示起點(diǎn)。
功能:LEFT(),返回C中左邊的n個(gè)字符。
RIGHT(),返回C中右邊的n個(gè)字符。
SUBSTR(),返回C中從n1開始的n2個(gè)字符,若省去n2,則返回從n1開始到C結(jié)束的字符;若n2的值大于C剩余字符,也返回從n1開始到C結(jié)束的字符。
5.生成重復(fù)字符函數(shù)
命令格式:REPLICATE(C,N)
參數(shù):C是一個(gè)字符型表達(dá)式,N是一個(gè)數(shù)字型表達(dá)式。
功能:返回把C重復(fù)N次的一個(gè)字符串,新字符串的字符個(gè)數(shù)是C中字符個(gè)數(shù)乘以N。
6.求子串位置函數(shù)
命令格式:AT(C1,C2[,n])
ATC(C1,C2[,n])
參數(shù):C1和C2都是字符型表達(dá)式,C1可以看成子串,n是一個(gè)數(shù)字表達(dá)式。
功能:AT(?),判斷C1是否在C2中,若不在則返回0;若在C2中,則返回C1在C2中的起始位置。n表示C1在C2中是第n次出現(xiàn)的,若省去,默認(rèn)為第一次。ATC()與AT()功能基本相同,區(qū)別ACT()不區(qū)分字母大小寫,而AT()要區(qū)分大小寫。
7.計(jì)算子串出現(xiàn)次數(shù)函數(shù)
命令格式:OCCURS(C1,C2)
參數(shù):C1和C2都是字符型表達(dá)式,C1可以看成子串。
功能:返回C1在C2中出現(xiàn)的次數(shù),得到一個(gè)數(shù)字,若不在C2中,返回0。
8.子串替換函數(shù)
命令格式:STUFF(C1,n1,n2,C2)
參數(shù):C1和C2是字符串,C2可以看成子串,n1和n2都是數(shù)值型,n1表示起點(diǎn),n2表示被替換的字符個(gè)數(shù)。
功能:用C2中的字符,在C1中從n1開始替換n2個(gè)字符。C2中字符個(gè)數(shù)可以與n2不同,若n2為0,表示插入C2字符串;若C2為空,表示刪除n2個(gè)字符。
9.字符替換函數(shù)
命令格式:CHRTRAN(C1,C2,C3)
參數(shù):C1、C2、C3均是字符串,C2和C3可以看成子字符串。
功能:當(dāng)C1中的一個(gè)或多個(gè)字符與C2中的某個(gè)字符相匹配時(shí),就用C3中對(duì)應(yīng)位置字符替換這些字符。若C3中字符個(gè)數(shù)少于C2中字符個(gè)數(shù),那么將C1中相匹配的字符刪除;若C3中字符個(gè)數(shù)多于C2中字符個(gè)數(shù),則多余的字符被忽略。2.4.3日期和時(shí)間型函數(shù)
1.系統(tǒng)日期和時(shí)間函數(shù)
命令格式:DATE()
TIME()
DATETIME()
參數(shù):上述三個(gè)函數(shù)均是無參函數(shù)。
功能:DATE(),返回系統(tǒng)當(dāng)前的日期(D),日期格式取決于設(shè)置,系統(tǒng)默認(rèn)是“美語”式。
TIME(),返回系統(tǒng)當(dāng)前的時(shí)間,格式為小時(shí):分:秒,是一個(gè)字符串(C)。
DATETIME(),返回系統(tǒng)當(dāng)前的日期和時(shí)間,是日期時(shí)間型(T)。
2.求年、月、日函數(shù)
命令格式:YEAR(D)
MONTH(D)
DAY(D)
參數(shù):D是一個(gè)日期型表達(dá)式。
功能:YEAR(),從日期中返回對(duì)應(yīng)的年,得到一個(gè)數(shù)字。
MONTH(),從日期中返回對(duì)應(yīng)的月,得到一個(gè)數(shù)字。
DAY(),從日期中返回對(duì)應(yīng)月的日期,得到一個(gè)數(shù)字。
3.求星期函數(shù)
命令格式:DOW(D)
CDOW(D)
參數(shù):D是一個(gè)日期型表達(dá)式。
功能:DOW(),從日期中返回對(duì)應(yīng)的星期幾,得到一個(gè)1~7中的數(shù)字,星期日是1。
CDOW(),從日期中返回對(duì)應(yīng)星期的英文名字。
4.求時(shí)、分、秒函數(shù)
命令格式:HOUR(T)
MINUTE(T)
SEC(T)
參數(shù):T是一個(gè)日期時(shí)間型表達(dá)式。
功能:HOUR(),從T中返回對(duì)應(yīng)的小時(shí),得到一個(gè)數(shù)字(0~23)。
MINUTE(),從T中返回對(duì)應(yīng)的分鐘,得到一個(gè)數(shù)字(0~59)。
SEC(),從T中返回對(duì)應(yīng)的秒,得到一個(gè)數(shù)字(0~59)。2.4.4測試類函數(shù)
1.表文件記錄測試函數(shù)
表文件記錄測試函數(shù)與表文件的操作及當(dāng)前記錄有關(guān),在某一時(shí)刻對(duì)一個(gè)表的當(dāng)前記錄只有一個(gè),把它叫記錄指針,或記錄指針是一個(gè)當(dāng)前記錄號(hào)。對(duì)于記錄指針的其它概念在記錄指針移動(dòng)一節(jié)再做詳述。
命令格式:BOF([n])
EOF([n])
參數(shù):n是一個(gè)數(shù)字表達(dá)式,指該表所在的工作區(qū)的區(qū)號(hào),若省去,表示當(dāng)前區(qū)。
功能:BOF(?),測試指定工作區(qū)中表文件的記錄指針是否在文件頭,若在,返回邏輯值.T.,否則返回邏輯值.F.。
EOF(?),測試指定工作區(qū)中表文件的記錄指針是否在文件尾,若在,返回邏輯值.T.,否則返回邏輯值.F.。
2.表當(dāng)前記錄測試函數(shù)
命令格式:RECNO([n])
參數(shù):n是一個(gè)數(shù)字表達(dá)式,指該表所在的工作區(qū)的區(qū)號(hào),若省去,表示當(dāng)前區(qū)。
功能:返回指定區(qū)中表的當(dāng)前記錄號(hào),是一個(gè)數(shù)字。若指定區(qū)中無表打開,返回值為0。系統(tǒng)規(guī)定,文件頭的記錄號(hào)為1,文件尾的記錄號(hào)是表中記錄個(gè)數(shù)加1。
3.表記錄個(gè)數(shù)測試函數(shù)
命令格式:RCCCOUNT([n])
參數(shù):n是一個(gè)數(shù)字表達(dá)式,指該表所在的工作區(qū)的區(qū)號(hào),若省去,表示當(dāng)前區(qū)。
功能:返回指定區(qū)中表的記錄個(gè)數(shù),是一個(gè)數(shù)字。若指定區(qū)中無表打開,返回值為0。返回的記錄個(gè)數(shù)是物理存在的個(gè)數(shù),與是否有邏輯刪除的記錄無關(guān)。
4.記錄刪除測試
命令格式:DELETED([n])
參數(shù):n是一個(gè)數(shù)字表達(dá)式,指該表所在的工作區(qū)的區(qū)號(hào),若省去,表示當(dāng)前區(qū)。
功能:測試指定區(qū)中表的當(dāng)前記錄是否被邏輯刪除(有無刪除標(biāo)記“*”),返回一個(gè)邏輯值,若刪除則為.T.,否則為.F.。
5.值域測試函數(shù)
命令格式:BETWEEN(e,e1,e2)
參數(shù):e,e1,e2是任意型表達(dá)式,但三個(gè)的類型必須統(tǒng)一。
功能:判斷e是否在e1和e2之間,返回一個(gè)邏輯值,若是為.T.,若不是為.F.。相當(dāng)于判斷數(shù)學(xué)中的e1≤e≤e2是否成立。
6.空值測試函數(shù)
命令格式:ISNULL(X)
參數(shù):X是一個(gè)變量或是一個(gè)字段名字。
功能:判斷X的值是否為空值(NULL)(空值也是一個(gè)值),返回一個(gè)邏輯值,若是NULL值為.T.,否則為.F.。一般在用于測試一個(gè)字段中的值是否為空值(對(duì)應(yīng)字段允許輸入NULL值)。
7.“空”值測試函數(shù)
命令格式:EMPTY(e)
參數(shù):e是一個(gè)任意型表達(dá)式。
功能:測試e的值是否“空”,返回一個(gè)邏輯值,若是真為.T.,若是假為.F.。
注意:此處的“空”與上邊空值是有區(qū)別的,空值是一種值,而“空”對(duì)于不同類型的數(shù)據(jù)有不同的規(guī)定,如表2.6所示。表2.6不同類型“空”的規(guī)定
8.數(shù)據(jù)類型測試函數(shù)
命令格式:VAR
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中學(xué)學(xué)生社團(tuán)活動(dòng)策劃與實(shí)施制度
- 【寒假專項(xiàng)】人教版六年級(jí)數(shù)學(xué)上冊(cè)應(yīng)用題必考專項(xiàng)訓(xùn)練(含答案)
- 養(yǎng)老院健康監(jiān)測制度
- 企業(yè)員工晉升與發(fā)展制度
- 吳佩孚介紹教學(xué)課件
- 老年糖尿病患者職業(yè)適應(yīng)性評(píng)估策略-2
- 強(qiáng)化地板備料工崗前安全理論考核試卷含答案
- 我國上市公司治理與運(yùn)作的困境剖析與革新策略
- 我國上市公司并購的財(cái)務(wù)效應(yīng)多維剖析
- 印刷設(shè)備維修工風(fēng)險(xiǎn)評(píng)估與管理知識(shí)考核試卷含答案
- 天津市河?xùn)|區(qū)2026屆高一上數(shù)學(xué)期末考試試題含解析
- 消化內(nèi)鏡ERCP技術(shù)改良
- DB37-T6005-2026人為水土流失風(fēng)險(xiǎn)分級(jí)評(píng)價(jià)技術(shù)規(guī)范
- 云南師大附中2026屆高三1月高考適應(yīng)性月考卷英語(六)含答案
- 2026湖北隨州農(nóng)商銀行科技研發(fā)中心第二批人員招聘9人筆試備考試題及答案解析
- 紀(jì)念館新館項(xiàng)目可行性研究報(bào)告
- 仁愛科普版(2024)八年級(jí)上冊(cè)英語Unit1~Unit6補(bǔ)全對(duì)話練習(xí)題(含答案)
- 騎行美食活動(dòng)方案策劃(3篇)
- 石化企業(yè)環(huán)保培訓(xùn)課件
- 2026年呂梁職業(yè)技術(shù)學(xué)院單招職業(yè)技能考試備考試題帶答案解析
- 2025年新疆師范大學(xué)輔導(dǎo)員招聘考試真題及答案
評(píng)論
0/150
提交評(píng)論