官术网_书友最值得收藏!

3.3 常用函數

函數是用程序來實現的一種數據運算或轉換,由函數名、參數和函數值3個要素組成,它可以用函數名加一對圓括號加以調用,參數放在圓括號里。按其返回值的類型主要分為字符函數、數值函數、日期和時間函數以及數據轉換函數等。

1.數值函數

(1)絕對值函數

格式:ABS(<數值表達式>)

功能:計算數值表達式的值,并返回該值的絕對值。

在命令窗口輸入:?abs (20-3*11)

屏幕顯示結果為:13

(2)指數函數

格式:EXP(<數值表達式>)

功能:計算以e為底的指數冪。

例如,求以e為低的4的指數。

在命令窗口輸入:?exp(4)

主屏幕顯示結果為:54.60

(3)四舍五入函數

格式:ROUND(<數值表達式>,<保留小數位數>)

功能:計算數值表達式的值,根據保留小數位數進行四舍五入。如果<保留小數位數>為正數n,則對小數點后n+1位四舍五入;如果<保留小數位數>為負數n,則對小數點前n位四舍五入。

例如,保留2位小數對223. 1592進行四舍五入運算。

在命令窗口輸入:?round(223.1592,2)

屏幕顯示結果為:223.16

例如,取2位整數對223. 1592進行四舍五入運算。

在命令窗口輸入:?round(223.1592,-2)

屏幕顯示結果為:200

(4)最大值函數

格式:MAX(<數值表達式1>,<數值表達式2>,…)

功能:求括號里各數值表達式的值,并返回最大值。

在命令窗口輸入:?max(20,4*8,-41,3.14)

屏幕顯示結果為:32

(5)最小值函數

格式:MIN(<數值表達式1>,<數值表達式2>,…)

功能:求括號里各數值表達式的值,并返回最小值。

在命令窗口輸入:?min(20,4*8,-41,3.14)

屏幕顯示結果為:-41

(6)求余數函數

格式:MOD(<數值表達式1>,<數值表達式2>)

功能:返回兩數相除后的余數,如果兩數同號,則函數值即為兩數相除的余數;如果兩數異號,則函數值為兩數相除的余數(正負號同被除數)再加上除數的值。

在命令窗口輸入:?mod(31,5)

屏幕顯示結果為: 1

在命令窗口輸入:?mod(31,-5)

屏幕顯示結果為:-4

(7)平方根函數

格式:SQRT(<數值表達式>)

功能:計算數值表達式的平方根。

在命令窗口輸入:?sqrt(49)

屏幕顯示結果為:7.00

在命令窗口輸入:?sqrt(abs(-81))

屏幕顯示結果為:9.00

(8)隨機數函數

格式:RAND(<數值表達式>)

功能:返回0~1之間的隨機數。

在命令窗口輸入:?rand(5*8)

屏幕顯示結果為:0.82

(9)取整函數

格式:INT(<數值表達式>)

功能:截去數值表達式小數部分,返回整數部分。

在命令窗口輸入:?int(-21.156)

屏幕顯示結果為:-21

(10)對數函數

格式:LOG(<數值表達式>)

功能:求數值表達式的對數。

在命令窗口輸入:?log(23)

屏幕顯示結果為:3.14

(11)符號函數

格式:SIGN(<數值表達式>)

功能:判斷表達式的符號。該數值為正、零、負數時分別返回1、0、-1。

在命令窗口輸入:?SIGN(12/2),SIGN(6-6),SIGN(-8*2)

屏幕顯示結果為:1  0  -1

2.字符函數

字符函數是處理字符型數據的函數,其自變量或函數值中至少有一個是字符型數據,函數中涉及的字符型數據項均以字符表達式表示。

(1)字符串長度函數

格式:LEN(<字符表達式>)

功能:返回指定字符表達式值的長度,即所含字符數(包括空格)。

在命令窗口輸入:?len("student")

屏幕顯示結果為:7

(2)字符串匹配函數

格式:LIKE(<字符表達式I),<字符表達式2>)

功能:比較兩字符串對應位置上的字符,若所有對應字符都匹配,函數返回邏輯真(. T.),否則返回邏輯假(. F.)。

例如,判斷2個字符串是否有匹配字符。

在命令窗口輸入:?like('student','Student')

屏幕顯示結果為:.F.

在命令窗口輸入:?like('stud*','student')

屏幕顯示結果為: .T.

(3)大小寫轉換函數

格式:LOWER(<字符表達式>)

UPPER (<字符表達式>)

功能:LOWER()將指定表達式值中的大寫字母轉成小寫字母,其他字符不變。

UPPER()將指定表達式值中的小寫字母轉成大寫字母,其他字符不變。

在命令窗口輸入:?lower("CHINA")

屏幕顯示結果為:china

在命令窗口輸入:?upper("Chinese")

屏幕顯示結果為:CHINESE

(4)生成空格字符串函數

格式:SPACE(<數值表達式>)

功能:返回指定數目的空格組成的字符串。

(5)截取子串函數

格式:LEFT(<字符表達式>,<數值表達式>)

RIGHT(<字符表達式>,<數值表達式>)

SUBSTR(<字符表達式),<起始位置>[,<長度>])

功能:LEFT()指從字符表達式左邊開始,截取<數值表達式>指定長度的字符串。

RIGHT()指從字符表達式右邊開始,截取<數值表達式>指定長度的字符串。

SUBSTR()指從指定起始位置開始,截取指定長度的字符串。

在命令窗口輸入:?left("I am a student",4)

屏幕顯示結果為:I am

在命令窗口輸入:?right("I am a student",7)

屏幕顯示結果為:student

在命令窗口輸入:?substr("I am a student",6,9)

屏幕顯示結果為:a student

(6)刪除前后空格函數

格式:ALLTRIM(<字符表達式>)

功能:將字符表達式前導和末尾的空格刪除。

在命令窗口輸入:?alltrim(" student ")

屏幕顯示結果為: "student"

(7)求子串位置函數

格式:AT(<字符表達式1>,<字符表達式2>[,<數值表達式>])

功能:如果<字符表達式1>是<字符表達式2>的子串,則返回<字符表達式1>值的首字符在<字符表達式2>值中的位置;若不是子串,則返回0。要區分大小寫。<數值表達式>表示在<字符表達式2>中<字符表達式1>第幾次出現時的位置。

在命令窗口輸入:?at ("xpro","Foxpro")

屏幕顯示結果為:3

在命令窗口輸入:?at ("CHI","China")

屏幕顯示結果為:0

(8)復制字符串函數

格式:replicate (<字符表達式>,<數值表達式>)

功能:將字符表達式復制指定的次數。

在命令窗口輸入:?replicate("中國",3)

屏幕顯示結果為:中國中國中國

(9)宏替換函數

格式:&<字符型內存變量>[.<字符串>]

功能:一是替換字符型內存變量的值,二是將數值型字符轉換為數值型數據。如果變量名后還有其他字符,必須用“.”隔開,即用“.”終止變量名。

在命令窗口輸入:x= "9"

?&x

屏幕顯示結果為:8

在命令窗口輸入:name="李國強"

?"歡迎&name.先生! "

屏幕顯示結果為:歡迎李國強先生!

3.日期和時間函數

日期和時間函數是處理日期型或日期時間型數據的函數,其自變量為日期型表達式或日期時間型表達式。

(1)系統時間函數

格式:TIME([<數值表達式>])

功能:輸出系統當前時間。

(2)系統日期函數

格式:DATE()

DATETIME()

功能:DATE()函數為輸出系統當前日期。

DATETIME()函數為輸出當前系統的日期及時間。

例如,顯示系統當前的日期、時間。

在命令窗口輸入:?date()

屏幕顯示結果為:06/12/15

在命令窗口輸入:?time()

屏幕顯示結果為:19:40:33

在命令窗口輸入:?datetime()

屏幕顯示結果為:06/12/15 07:41:40 PM

(3)日期函數

格式:DAY(<日期型表達式>)

功能:輸出日期型表達式中的天數。

(4)星期函數

格式:CDOW(<日期型表達式>)

DOW(<日期型表達式>)

功能: CDOW函數輸出日期型表達式中星期的英文名稱。

DOW函數輸出日期型表達式中星期的數值。

(5)月份函數

格式:MONTH(<日期型表達式>)

CMONTH(<日期型表達式>)

功能:MONTH函數輸出日期型表達式的月份數。

CMONTH函數輸出日期型表達式月份的英文名。

(6)年份函數

格式:YEAR(<日期型表達式>)

功能:輸出日期型表達式的年份。

例如,測試表達式{^2015-6-12 10:25:10}的年、月、日和星期。

在命令窗口輸入:?year({^2015-06-12 10:25:10})

屏幕顯示結果為:2015

在命令窗口輸入:?month({^2015-06-12 10:25:10})

屏幕顯示結果為:6

在命令窗口輸入:?day({^2015-06-12 10:25:10})

屏幕顯示結果為:12

在命令窗口輸入:?cdow({^2015-06-12 10:25:10})

屏幕顯示結果為:星期五

在命令窗口輸入:?dow({^2015-06-12 10:25:10})

屏幕顯示結果為:6

4.數據類型轉換函數

在數據庫應用過程中,經常要將不同數據類型的數據進行相應轉換,滿足實際應用的需要。Visual FoxPro系統提供了若干個轉換函數,較好地解決了數據類型轉化的問題。

(1)字符型轉為數值型函數

格式:VAL(<字符型表達式>)

功能:將數字組成的字符串轉換成數值,遇到非數字字符時停止。

在命令窗口輸入:

MA="43"

MB="25"

?MA+MB

?VAL(MA)+VAL(MB)

屏幕顯示結果為:

4325

68.00

(2)數值轉換成字符型函數

格式:STR(數值型表達式[,<長度>[,<小數位數>]])

功能:將數值型表達式的值轉換成字符串,轉換時根據需要自動進行四舍五入。如果<長度>值大于數值型表達式的所有位數,則字符串加前導空格以滿足規定的<長度>要求;如果<長度>值大于等于數值型表達式值的整數部分位數(包括負號)但又小于所有位數,則優先滿足整數部分而自動調整小數位數;如果<長度>值小于數值型表達式值的整數部分位數,則返回一串星號(*)。如果無小數位數和長度,則<小數位數>的默認值為0,<長度>的默認值為10。

在命令窗口輸入:

N=-123.456

?"n="+STR(n,8,3)

?STR(n,9,2),STR(n,6,2),STR(n,3),STR(n,6),STR(n)

屏幕顯示結果為:

N=-123.456

-123.46  -123.5  ***  -123  -123

(3)ASCII碼函數

格式:ASC(<字符型表達式>)

功能:將字符表達式首字符轉為相應的ASCII碼值。

在命令窗口輸入:?ASC("Look")

屏幕顯示結果為:76

(4)ASCII碼轉為字符函數

格式:CHR(<數值型表達式>)

功能:將ASCH碼值轉為相應的字符。

在命令窗口輸入:?CHR(78)

屏幕顯示結果為:N

(5)日期字符型轉換函數

格式:DTOC(<日期型表達式>[,1])

功能:將日期型表達式轉為相應的字符串,若選參數[,1],則轉換為年月日的形式。

在命令窗口輸入:?DTOC({^2015-06-12})

屏幕顯示結果為:06/12/15

在命令窗口輸入:?DTOC({^2015-06-12},1)

屏幕顯示結果為:20150612

(6)字符型轉為日期型函數

格式:CTOD(<字符型表達式>)

功能:將××/××/××格式的字符型表達式轉為日期值。

在命令窗口輸入:?CTOD("06/1510")

屏幕顯示結果為:06/15/10

拓展知識

1.字符型數據的比較

在Visual FoxPro中,有3種排序或比較規則,即Machine、PinYin和Stroke規則。

中文Visual Foxpro默認為PinYin比較規則,但可以選擇比較規則。

選擇比較規則的命令:

SET COLLATE TO "<排序次序名>"

排序名必須放在引號當中,次序名可以是“PinYin”“Machine”或“Stroke”。

Machine規則:西文和符號是按ASCII碼值排序。

PinYin規則:漢字按照拼音順序,即字典序比較。

Stroke規則:中文按照書寫筆畫的多少排序。對于西文符號而言,與PinYin規則相同。

2.字符串精確比較與EXACT設置

用"=="號比較兩個字符型數據是否相等時,結果與SET EXACT的狀態無關,左右兩個字符串必須完全一樣才認為相等。

當用“=”號比較兩個字符型數據是否相等時,結果與SET EXACT的狀態有關:

SET EXACT OFF時,只要右邊那個字符串與左邊字符串的前面部分內容相等即可;

SET EXACT ON時,左右兩個字符串必須完全一樣才認為相等。

在命令窗口輸入:SET EXACT OFF

?"ABC"="AB"

屏幕顯示結果為: .T.

在命令窗口輸入:SET EXACT ON

?"ABC"="AB"

屏幕顯示結果為: .F.

3.測試函數

在數據庫應用過程中,用戶需要了解數據對象的類型、狀態等屬性,Visual FoxPro系統提供了相關的測試函數,使用戶能夠準確地獲取操作對象的相關屬性。

(1)記錄號測試函數

格式:RECNO()

功能:返回當前記錄的記錄號。

(2)記錄數測試函數

格式:RECCOUNT(<工作區>)

功能:返回當前表或指定工作區表的記錄個數,包括邏輯刪除的記錄在內。

(3)表文件首測試函數

格式:BOF()

功能:測試當前表文件中的記錄指針是否指向文件首,若“是”返回邏輯真. T.,若“不是”返回邏輯假. F.。

(4)表文件尾測試函數

格式:EOF()

功能:測試當前表文件中的記錄指針是否指向文件尾,若“是”返回邏輯真. T.,若“不是”返回邏輯假. F.。

(5)表名測試函數

格式:DBF(<工作區>)

功能:測試指定工作區文件名。

(6)表別名測試函數

格式:ALIAS(<工作區>)

功能:測試指定工作區表的別名。

(7)測試查詢結果函數

格式:FOUND([<工作區>])

功能:用LOCATE, CONTINUE, SEEK, FIND語句查找到則返回. T.,否則返回. F.。

(8)測試表達式類型函數

格式:TYPE("<表達式>")

功能:返回表達式類型,以N、C、D、L等之一表示。

技能操作

1.在命令窗口依次輸入并執行下列命令

設置顯示世紀格式,顯示后再取消:

SET DATE AMERICAN  &&設置北美洲日期格式

SET CENTURY ON  &&設置顯示世紀

d={^2015-03-01}  &&將日期賦予變量d

?d  &&顯示變量d的內容

屏幕顯示結果為:03/01/2015

SET CENTURY OFF  &&設置取消顯示世紀

SET MARK TO "-"  &&設置分隔符為“-”

?d  &&顯示變量d的內容

屏幕顯示結果為:03-01-15

2.顯示12小時制和24小時制的日期與時間

在命令窗口輸入并執行下列命令:

屏幕顯示結果為:03-01-2015 15:30:20

SET HOURS TO 12  &&設置以12小時制顯示時間

?t

屏幕顯示結果為:03-01-2015 3:30:20 PM

在12小時制下,若時間的后面顯示AM,表示上午;若顯示PM,表示下午。

主站蜘蛛池模板: 八宿县| 兰坪| 扎鲁特旗| 揭西县| 康平县| 桃源县| 广安市| 北碚区| 栖霞市| 万山特区| 伽师县| 成安县| 涞源县| 盐边县| 晋宁县| 芜湖县| 河北区| 盱眙县| 保德县| 林周县| 桃江县| 承德县| 江西省| 满城县| 汕头市| 壶关县| 增城市| 玉溪市| 酉阳| 鸡东县| 孝昌县| 鸡泽县| 林甸县| 衡东县| 金沙县| 罗城| 开化县| 南皮县| 泸水县| 石楼县| 武义县|