
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,表示下午。