- Visual Foxpro 9.0數據庫程序設計教程
- 裴海紅
- 4764字
- 2020-06-19 09:11:09
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,表示下午。
- INSTANT Mock Testing with PowerMock
- Learning Scala Programming
- JSP網絡編程(學習筆記)
- Mastering AWS Lambda
- vSphere High Performance Cookbook
- Interactive Applications Using Matplotlib
- INSTANT Sinatra Starter
- Statistical Application Development with R and Python(Second Edition)
- Android應用開發實戰
- IoT Projects with Bluetooth Low Energy
- 愛上C語言:C KISS
- Machine Learning for OpenCV
- The Statistics and Calculus with Python Workshop
- Mapping with ArcGIS Pro
- Python 3.6從入門到精通(視頻教學版)