
3.2 表达式的应用
表达式是指用括号和运算符把常量、变量以及函数连接而成的式子,单个的常数、变量、函数是一种特殊的表达式,表达式具有计算、判断和数据类型转换等作用。表达式通过计算均能得到一个结果,称为表达式的值。表达式所用到的运算符分为数值型、字符型、日期型、关系型和逻辑型等,因而就有相应的数值表达式、字符串表达式、日期表达式、关系表达式和逻辑表达式。
1.数值、字符与日期时间表达式
(1)数值型表达式
数值型表达式是由数值运算符将数值常量、变量、字段或函数连接起来构成的式子,运算结果为数值型。常见的算术运算符按优先级排列,如表3-1所示。
表3-1 数值运算符

【例3】计算表达式50-(2**5/8+3)*2的值。
在命令窗口输入:
?50-(2**5/8+3)*2
屏幕显示结果为:
36
【例4】a=7,b=5,计算表达式(a+b)/(a-b)的值。
在命令窗口输入:
a=7
b=5
?(a+b)/(a-b)
屏幕显示结果为:
6.0000
(2)字符表达式
字符表达式由字符型常量、变量、函数和字符运算符组成,其运算结果仍为字符型。字符运算符主要有两类:连接运算和包含运算。
连接运算有完全连接和不完全连接两种,分别使用运算符“+”和“-”,如表3-2所示。
表3-2 字符运算符

包含运算本应归于关系运算类,由于它是字符串之间特有的关系运算,故将其放在字符表达式中介绍,包含运算的结果不再是字符型而是逻辑型。
格式:字符串1$字符串2
功能:如果字符串1包含在字符串2中,则表达式的值为.T.,否则为.F.。
【例5】字符表达式的应用。
在命令窗口输入:
?"青少年"+"儿童"
屏幕显示结果为:
青少年儿童
在命令窗口输入:
?"青少年"-"儿童"
屏幕显示结果为:
青少年儿童
在命令窗口输入:
?" street "$"sterrr"
屏幕显示结果为:
.F.
在命令窗口输入:
?"street"$" streets"
屏幕显示结果为:
.T.
注意:以上所有运算符与操作数组成的表达式中,操作数必须是同类型的数据。
(3)日期时间表达式
日期型表达式由日期型或数值型常量、变量、函数和日期运算符“+”、“-”组成,其运算结果为日期型或数值型,如表3-3所示。
“+”运算符:如果日期值+数值表示日期值加天数,日期值+日期型无意义。
“-”运算符:如果日期值-数值表示日期值减天数,日期型-日期型表示两日期相距的天数。
表3-3 日期时间运算符

【例6】日期时间表达式的应用。
在命令窗口输入:
?{^2015-06-10}+10
屏幕显示结果为:
06/20/15
在命令窗口输入:
?{^2015-06-10}-10
屏幕显示结果为:
05/31/15
在命令窗口输入:
?{^2015-06-10}-{^2014-06-10}
屏幕显示结果为:
365
在命令窗口输入:
?{^2015-06-10}+{^2014-06-10}
屏幕显示结果为:
“操作符/操作数类型不匹配”的错误信息。
2.关系表达式
关系运算符是对两个数据进行比较操作的一种符号,如表3-4所示,关系运算的结果一定是逻辑值。
表3-4 关系运算符

在关系表达式运算时,就是比较同类两数据对象的“大小”,对于不同类型的数据,其“大小”或是值的大小,或是先后顺序。日期或日期时间数据则以日期或时间的先后顺序为序。默认规则为:
①单个字符:是以字符ASCII码的大小作为字符的“大小”,也就是有先后顺序。
②字符串:从左到右逐个字符进行比较,但因系统相关设置状态不同,比较的结果与预期的不完全相同。
③汉字:系统默认按汉字的拼音排序汉字的顺序,因此汉字的比较实质上是以字母的顺序进行比较。在Visual FoxPro系统中可以设置汉字按笔画排列顺序,因而,汉字也可以对笔画数的多少进行“大小”比较。
【例7】日期时间表达式的应用。
在命令窗口输入:?7*7>25
屏幕显示结果为:.T.
在命令窗口输入: ?"abcde"<"abc"
屏幕显示结果为:.F.
在命令窗口输入: ?"abcde"="abc"
屏幕显示结果为:.F.
在命令窗口输入:?"AB"$"XABY"
屏幕显示结果为:.T.
3.逻辑表达式
逻辑表达式由逻辑运算符和逻辑常量、变量、函数及关系表达式组成,其结果仍是逻辑值。
逻辑运算符按其运算优先级有NOT或!(非)、AND(与)、OR(或)。
①使用.NOT.运算的表达式为假,则逻辑表达式的值为真。
②使用.AND.连接的两个表达式的值同时为真,则其值为真,其余都为假。
③使用.OR.连接的两个表达式的值,只要有一个为真,其值就为真。
【例8】逻辑表达式比较。
在命令窗口输入:?NOT(70 >124)
屏幕显示结果为: .T.
在命令窗口输入:?not(70<124)and(40<50)
屏幕显示结果为:.T.
在命令窗口输入:?not(70<124)or(40=50)
屏幕显示结果为: .T .
4.运算符优先级
不同类型的运算符有可能出现在同一个表达式中。运算过程中,括号的优先级最高,其余各类运算符的优先级别由高到低依次为:
①数值运算(其中%运算与/、*同级别)、字符串运算和日期运算。
②关系运算。
③逻辑运算。