函数是指由命令代码组成的并能完成特定功能的一段程序。Visual FoxPro 6.0 提供了大量 的函数(称为系统函数)供用户直接使用,另外用户还可以自己编写函数(称为自定义函数) 。 本节将介绍系统函数中一些比较常用的函数, 把这些常用函数分为 5 类: 数值函数、 字符函数、
日期和时间函数、数据类型转换函数和测试函数。
每个函数都有函数名,函数名决定了函数的功能。函数名后面带有一对圆括号,圆括号 里的内容称为自变量,不同函数含有的自变量的个数不同,有的函数无自变量。各个函数的格 式和运算方法不同,函数的运算结果称为函数值或者返回值,函数值的类型即为函数的类型。
3.4.1 数值函数
数值函数是指函数值为数值的一类函数,其自变量和返回值均为数值型数据。数值函数 主要用于数值运算。
1.求绝对值函数和符号函数 格式:ABS(<数值表达式>)
SIGN(<数值表达式>)
功能:ABS()返回指定数值表达式的绝对值;SIGN()返回指定数值表达式的符号,当表达 式的结果为正、负和零时,返回值分别是 1、1 和 0。
例 3.47 在命令窗口中输入以下命令:
STORE 5 TO x
?ABS(x),ABS(x+5),ABS(x*(2)),ABS(3.14*3^2)
?SIGN(x),SIGN(x+5),SIGN(x*(2)),SIGN(3.14*3^2) 分别按 Enter 键执行,输出结果如下:
5 0 10 28.26
1 0 1 1 2.四舍五入函数
格式:ROUND(<数值表达式 1>,<数值表达式 2>)
功能:返回指定数值表达式在指定位置四舍五入后的结果。<数值表达式 1>表示在指定位 置要进行四舍五入的数据,<数值表达式 2>表示指定四舍五入的位置。当<数值表达式 2>大于 等于 0 时,表示要保留的小数位数;当<数值表达式 2>小于 0 时,表示整数部分的舍入位数,
即整数中从个位开始 0 的个数。
例 3.48 在命令窗口中输入以下命令:
STORE 987.654 TO x
?ROUND(x,2),ROUND(x,1),ROUND(x,0),
??ROUND(x,1),ROUND(x,2),ROUND(x,3),ROUND(x,4) 分别按 Enter 键执行,输出结果如下:
987.65 987.7 988 990 1000 1000 0 例 3.49 在命令窗口中输入以下命令:
STORE 756.456 TO y
?ROUND(y,3)
按 Enter 键执行,输出结果如下:
1000
3.求圆周率函数 格式:PI(<数值表达式>)
功能:返回圆周率p的值(数值型)。该函数没有自变量。
例 3.50 在命令窗口中输入以下命令:
?PI()
按 Enter 键执行,在主屏幕上显示的结果如下:
3.14
4.求整数函数
格式:INT(<数值表达式>) CEILING(<数值表达式>) FLOOR(<数值表达式>)
功能:INT()返回指定数值表达式的整数部分(不进行四舍五入) ;CEILING()返回大于或 等于数值表达式的最小整数;FLOOR()返回小于或等于数值表达式的最大整数。
例 3.51 在命令窗口中输入以下命令:
STORE 20.5 TO x
?INT(x),INT(x)
?CEILING(x),CEILING(x)
?FLOOR(x),FLOOR(x)
分别按 Enter 键执行,输出结果如下:
20 20 21 20 20 21
例 3.52 在命令窗口中输入以下命令:
? INT(PI( )*3^2)
按 Enter 键执行,输出结果如下:
28
5.求余数函数
格式:MOD(<数值表达式 1>,<数值表达式 2>)
功能:返回两个数值表达式相除后的余数。<数值表达式 1>是被除数,<数值表达式 2>是 除数。余数的正负号与除数相同。此函数的运算方法和求余符号“%”相同,相当于求<数值 表达式 1>%<数值表达式 2>的值。
例 3.53 在命令窗口中输入以下命令:
x=10 y=3
? MOD(x,y), MOD(x,y), MOD(x,y), MOD(x,y) 按 Enter 键执行,输出结果如下:
1 1 2 2 6.求最大值和最小值函数
格式:MAX(<数值表达式 1>,<数值表达式 2>[,<数值表达式 3>…]) MIN(<数值表达式 1>,<数值表达式 2>[,<数值表达式 3>…])
功能:MAX()计算各自变量表达式的值,并返回其中的最大值;MIN()计算各自变量表达 式的值,并返回其中的最小值。
自变量表达式的类型也可以是字符型、货币型、逻辑型、日期型和日期时间型,但所有 表达式的类型必须相同。比较大小时,按照关系表达式中所叙述的方法进行比较。
例 3.54 在命令窗口中输入以下命令:
?MAX(2,10,5),MAX("good","morning","everyone"),MIN("2","10","05") 按 Enter 键执行,在主屏幕上显示的结果为:
10 morning 05 3.4.2 字符函数
字符函数是处理字符类型数据的一类函数,其自变量或函数值中至少有一个是字符型的 数据。
1.求字符串长度函数 格式:LEN(<字符表达式>)
功能:返回指定字符表达式值的长度,即所包含的字符的个数。一个字母或一个字符的 长度为 1,一个汉字的长度为 2。
返回值:数值型。
例 3.55 在命令窗口中输入以下命令( “□”代表空格) :
?LEN("HAPPY"),LEN("中文 Visual□FoxPro6.0")
??LEN(""),LEN("□□□")
?LEN(SPACE(3)SPACE(2))
分别按 Enter 键执行,输出结果如下:
5 20 0 3 5
2.空格字符串生成函数 格式:SPACE(<数值表达式>)
功能:返回由数值表达式中指定数目的空格组成的字符串。
例 3.56 在命令窗口中输入以下命令:
?LEN(SPACE(10))
按 Enter 键执行,在主屏幕上显示的结果为:
10
3.删除前后空格函数 格式:TRIM(<字符表达式>)
LTRIM(<字符表达式>) ALLTRIM(<字符表达式>)
功能:TRIM()返回指定字符表达式值去掉尾部空格后形成的字符串;LTRIM()返回指定字 符表达式值去掉前导空格后形成的字符串;ALLTRIM()返回指定字符表达式值去掉前导和尾 部空格后形成的字符串。
例 3.57 在命令窗口中输入以下命令( “□”代表空格) : STORE SPACE(2)+"中文 Visual□FoxPro6.0"+SPACE(3) TO x
?x,TRIM(x)
?LTRIM(x),ALLTRIM(x)
?LEN(x),LEN(TRIM(x)),LEN(LTRIM(x)),LEN(ALLTRIM(x)) 分别按 Enter 键执行,输出结果如下:
□□中文 Visual□FoxPro6.0□□□ □□中文 Visual□FoxPro6.0 中文 Visual□FoxPro6.0□□□ 中文 Visual□FoxPro6.0
25 22 23 20 4.大小写转换函数
格式:LOWER(<字符表达式>) UPPER(<字符表达式>)
功能: LOWER()将指定字符表达式中的大写字母转换成小写字母, 其他字符不变; UPPER() 将指定字符表达式中的小写字母转换成大写字母,其他字符不变。
例 3.58 在命令窗口中输入以下命令:
STORE "中文 Visual FoxPro 6.0" TO x
?LOWER(x),UPPER(x)
按 Enter 键执行,输出结果如下:
中文 visual foxpro6.0 中文 VISUAL FOXPRO6.0 5.取子串函数
格式:LEFT(<字符表达式>,<N>) RIGHT(<字符表达式>,<N>)
SUBSTR(<字符表达式>,<起始位置>,[,<N>])
功能: LEFT()返回从指定字符表达式的左端开始的 N 个字符作为函数值; RIGHT()返回从 指定字符表达式的右端开始的 N 个字符作为函数值;SUBSTR()返回从指定字符表达式的<起 始位置>开始的 N 个字符作为函数值,若缺省第三个自变量<N>,则函数从起始位置开始一直 取到最后一个字符。
例 3.59 在命令窗口中输入以下命令:
?LEFT("HELLO WORLD",5)
?RIGHT("HELLO WORLD",5)
?SUBSTR("HAPPY NEW YEAR",5)
?SUBSTR("HAPPY NEW YEAR",5,3)
?SUBSTR("计算机等级考试",7,4) 分别按 Enter 键执行,输出结果如下:
HELLO WORLD Y NEW YEAR Y N
等级
6.计算子串出现次数函数
格式:OCCURS(<字符表达式 1>,<字符表达式 2>)
功能:如果<字符表达式 1>是<字符表达式 2>的子串,则返回<字符表达式 1>在<字符表 达式 2>中出现的次数,否则返回数值 0。
返回值:数值型。
例 3.60 在命令窗口中输入以下命令:
STORE "This is my sister" TO x
?OCCURS("is",x),OCCURS("sis",x),OCCURS("ss",x),OCCURS("IS",x) 按 Enter 键执行,输出结果如下:
3 1 0 0 7.求子串位置函数
格式:AT(<字符表达式 1>,<字符表达式 2>[,<数值表达式>]) ATC(<字符表达式 1>,<字符表达式 2>[,<数值表达式>])
功能:AT(),若<字符表达式 1>是<字符表达式 2>的子串,则返回<字符表达式 1>的首字 符在<字符表达式 2>中的位置,否则返回 0;ATC(),若<字符表达式 1>是<字符表达式 2>的子 串,则返回<字符表达式 1>的首字符在<字符表达式 2>中的位置,否则返回 0,与 AT()功能类 似,区别是在子串比较时不区分字母大小写。
返回值:数值型。
例 3.61 在命令窗口中输入以下命令:
STORE "This is my sister" TO x
?AT("is",x),AT("IS",x),ATC("is",x),ATC("IS",x)
?AT("sis",x),AT("SIS",x),ATC("sis",x),ATC("SIS",x) 分别按 Enter 键执行,输出结果如下:
3 0 3 3 12 0 12 12 8.字符串匹配函数
格式:LIKE(<字符表达式 1>,<字符表达式 2>)
功能: 若<字符表达式 1>与<字符表达式 2>对应位置的所有字符都匹配, 则返回逻辑真值,
否则返回逻辑假值。<字符表达式 1>中可以包含通配符“*”和“?” ,<字符表达式 2>中不可 以使用通配符。
例 3.62 在命令窗口中输入以下命令:
?LIKE("ABC","AB"),LIKE("AB*","ABC"),LIKE("AB","AB*") 按 Enter 键执行,输出结果如下:
.F. .T .F.
9.宏替换函数
?s3+&s2
按 Enter 键执行,输出结果如下:
中文 Visual FoxPro 6.0 3.4.3 日期和时间函数 MONTH(<日期表达式>|<日期
时间表达式>)
返回指定日期或日期时间表达式中的月份 数值型
求年份、月 份和天数
DAY(<日期表达式>|<日期时间 表达式>)
?DATE(),TIME(),DATETIME()
按 Enter 键执行,在主屏幕上显示的结果为(由系统当前日期时间决定) : 04/30/09 20:29:35 04/30/09 08:29:35 PM
例 3.65 在命令窗口中输入以下命令:
STORE {^20090601} TO x
?YEAR(x),MONTH(x),DAY(x) 按 Enter 键执行,输出结果如下:
2009 6 1
例 3.66 在命令窗口中输入以下命令:
STORE {^20090601 10:30:40 PM} TO x
?HOUR(x),MINUTE(x),SEC(x) 按 Enter 键执行,输出结果如下:
22 30 40
3.4.4 数据类型转换函数
在数据库的应用过程中, 一般同类数据才能进行正常的运算, 此时不同数据类型的数据必 须将它们转换成同一类型,Visual FoxPro 提供了数据类型转换函数。
1.数值转换成字符串函数
格式:STR(<数值表达式>[,<长度>[,<小数位数>]]) 功能:将<数值表达式>的值转换成字符串。
返回值:将数值表达式按指定的<长度>和<小数位数>转换成字符串。
在转换时,需要注意以下几点(设理想长度 L=整数位数+小数位数+小数点):
(1)当<长度>大于 L 时,字符串前加上空格,满足规定的<长度>要求。
(2)当<长度>大于等于整数部分位数但又小于 L 时,优先考虑整数部分而自动调整小数 位数。
(3)当<长度>小于整数部分位数时,返回一串星号(*) 。
(4)当<小数位数>的默认值为 0 时,<长度>的默认值为 10。
例 3.67 在命令窗口中输入以下命令:
X=314.159
?STR(X,9,2),STR(X,6,2),STR(X,3)
?STR(X,6),STR(X)
分别按 Enter 键执行,输出结果如下:
314.16 314.2 ***
314 314
2.字符串转换成数值函数 格式:VAL(<字符表达式>)
功能:将自变量中的字符串转换成数值。
返回值:将由数字符号(包括正负号、小数点)组成的字符型数据转换成相应的数值型 数据。若字符串内出现非数字字符,那么只转换前面部分;若字符串的首字符不是数字符号,
则返回数值 0,但忽略前导空格。
例 3.68 在命令窗口中输入以下命令( “□”代表空格) :
?VAL("123.56"),VAL("a123.56"),VAL("12a3.56"),VAL("□□□123.56") 按 Enter 键执行,在主屏幕上显示的结果为:
123.56 0.00 12.00 123.56 3.字符串转换成日期函数
格式:CTOD(<字符表达式>)
功能:将<字符表达式>转换成日期型数据。其中的<字符表达式>要按日期的格式进行书写。
例 3.69 在命令窗口中输入以下命令:
SET CENTURY ON
?CTOD("12/31/09")
按 Enter 键执行,输出结果如下:
12/31/2009
4.日期或日期时间转换成字符串函数 格式:DTOC(<日期表达式>)
功能:将<日期表达式>转换成字符型数据。转换后的字符型数据的格式和日期的格式相 一致,并受相关日期格式命令的影响。
例 3.70 在命令窗口中输入以下命令:
SET CENTURY ON
?DTOC({^20091231})
按 Enter 键执行,输出结果如下:
12/31/2009 3.4.5 测试函数
为了了解有关数据对象的类型、状态等属性,Visual FoxPro 系统提供了一组相关的测试 函数,使用户能够准确地获取操作对象的相关属性。
1.值域测试函数
格式:BETWEEN(<表达式 1>,<表达式 2>,<表达式 3>)
功能:判断一个表达式是否介于另外两个表达式的值之间。若表达式 1 的值大于等于表 达式 2 的值并且小于等于表达式 3 的值,则返回逻辑真,否则返回逻辑假;若表达式 2 或表达 式 3 值为 NULL,则返回值也为 NULL。
注意:自变量中 3 个表达式的数据类型要一致。
例 3.71 在命令窗口中输入以下命令:
?BETWEEN(5,2,10),BETWEEN("good","morning","everyone")
?BETWEEN("2","05","10"),BETWEEN(2,.NULL.,05) 分别按 Enter 键执行,输出结果如下:
.T. .F.
.F. .NULL.
2.空值(NULL 值)测试函数 格式:ISNULL(<表达式>)
功能:若自变量表达式的结果为 NULL,则返回逻辑真(.T.),否则返回逻辑假(.F.) 。 例 3.72 在命令窗口中输入以下命令:
A=.NULL.
?A,ISNULL(A)
按 Enter 键执行,输出结果如下:
.NULL. .T.
3. “空”值测试函数 格式:EMPTY(<表达式>)
功能:若表达式结果为“空”值,则返回逻辑真(.T.),否则返回逻辑假(.F.)。 “空”值 与空值(NULL 值)是两个不同的概念。关于不同类型的数据, “空”值的规定如表 39 所示。
功能:若表达式结果为“空”值,则返回逻辑真(.T.),否则返回逻辑假(.F.)。 “空”值 与空值(NULL 值)是两个不同的概念。关于不同类型的数据, “空”值的规定如表 39 所示。