• 沒有找到結果。

函数是指由命令代码组成的并能完成特定功能的一段程序。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 键执行,输出结果如下:

10  28.26 

­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       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 

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 {^2009­06­01} TO x 

?YEAR(x),MONTH(x),DAY(x) 按 Enter 键执行,输出结果如下:

2009  6     1

例 3.66  在命令窗口中输入以下命令:

STORE {^2009­06­01 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({^2009­12­31})

按 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 值)是两个不同的概念。关于不同类型的数据, “空”值的规定如表 3­9 所示。

功能:若表达式结果为“空”值,则返回逻辑真(.T.),否则返回逻辑假(.F.)。 “空”值 与空值(NULL 值)是两个不同的概念。关于不同类型的数据, “空”值的规定如表 3­9 所示。

相關文件