Visual Foxpro 9.0数据库程序设计教程
上QQ阅读APP看书,第一时间看更新

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