? {^2007-05-01 22:22:33}+3 && 输出结果为:2007.05.01 10:22:36 PM ? {^2007-05-01 22:22:33}+3.12 && 输出结果为:2007.05.01 10:22:36 PM ? {^2007-05-01 22:22:33}+3.98 && 输出结果为:2007.05.01 10:22:37 PM ? {^2007-05-01 22:22:33}-1.2 && 输出结果为:2007.05.01 10:22:32 PM ? {^2007-05-01 22:22:33}-1.98 && 输出结果为:2007.05.01 10:22:31 PM
2. 日期时间与日期时间运算
运算格式:<日期时间表达式>-<日期时间表达式>
运算说明:运算结果表示两个日期时间之间相差的秒数。 【 例 2.54 】
? {^2007-05-01 22:22:33}-{^2007-05-01 22:21:33} && 输出结果为:60 ? {^2007-05-01 22:22:33}-{^2007-05-01 22:23:33} && 输出结果为:-60
2.5.3 常用日期型函数
日期函数的返回值是日期型数据。 1. 系统日期函数
函数格式:Date( )
函数说明:函数值为系统当前日期。 【 例 2.55 】
Set Date ANSI Set Century On
? Date( ) && 输出系统的当前日期
2. 字符转换成日期函数
函数格式:Ctod(<字符表达式>)
函数说明:将符合日期格式的字符表达式值转换成日期型数据。若字符表达式值不符合日期格式要求,则返回空日期型数据。
【 例 2.56 】
Set Date ANSI Set Century On
? Ctod('2008.10.01') + 2 && 输出结果为:2008.10.03
2.6 关系表达式
关系表达式,也称为比较表达式,采用关系运算符将同类型数据连接起来,以便进行比较。可以对字符型、数值型、日期、日期时间型或逻辑型数据进行关系运算。关系运算的结果是逻辑型数据。当关系成立时,运算结果为真(.T.);否则运算结果为假
(.F.)。关系运算符如表2.2。
表2.2 关系运算符
运算符 说 明 > 大于 < 小于 举 例 2>3 值为.F. .T.<.F 值为.F. '丁 '<>'于' 值为.T. 'Abc'=='Ab' 值为.F. 运算符 说 明 >= 大于或等于 <= 小于或等于 = 等于 $ 测试子串包含 举 例 {^2007-10-2}>={^2007-10-1} 值为.T. 2<=3 值为.T. 2<=2 值为.T. '章'='张 ' 值为.F. 2*3=6 值为.T. 'Bc'$'ABcd' 值为.T. <>、!=不等于 或 # == 字符精确相等
各种关系运算符的优先级别相同,运算符“$”只能对字符型数据进行比较。在进行关系运算时,数值型数据依据数学上的比较规则;日期及日期时间型数据比较时,较后的日期(时间)大于较前的日期(时间);逻辑型数据比较时,逻辑真(.T.)大于逻辑假(.F.)。字符型数据的比较结果取决于当前的比较规则和“排序次序”。
2.6.1 字符型数据的比较规则
字符型数据的比较规则有精确比较和非精确比较两种规则。在不同规则下,两个字符型数据的比较结果可能不同。通过VFP命令可以设置字符型数据的比较规则。
命令格式:Set Exact On | Off
命令说明:Set Exact On是精确比较规则;Set Exact Off(系统默认)是非精确比较规则。
运算符“==”不受Set Exact状态影响,它要求两个字符串(包含空格)必须完全一致,运算结果才是真(.T.)。
1.精确比较规则
精确比较是对两个字符型数据去掉尾部空格后的字符串自左向右按对应字符进行比较。如果比较到某位字符不相等,则包含小字符的字符串较小;如果比较到较短字符串的末尾还没比较出大小关系,则短字符串较小;如果两个字符串完全相同(对应字符和长度均相同),则运算结果为相等(=)。
【 例 2.57 】
Set Exact On
? 'BAG'='BAG︼', 'CAME'<'COM', 'BEE'<='BE' && 输出为:.T. .T. .F.
2.非精确比较规则
非精确比较是对两个字符型数据(含空格)自左向右按对应字符进行比较。如果比较到某位字符不相等,则包含小字符的数据较小;如果运算符右侧整个数据是左侧数据的首部子串,或两个数据完全相同,则运算结果为相等(=);如果运算符左侧整个数据是右侧数据的首部子串,则左侧数据较小。
【 例 2.58 】
Set Exact Off
? 'BAG'<'BAY', 'BEE'='BE', 'BAG'<'BAG︼', '李'<'李明' && 输出为:.T. .T. .T. .T.
无论执行字符型数据的哪个比较规则和“排序次序”,字符的排序规律为:数字小
于英文字母,英文字母小于汉字。
2.6.2 字符数据的“排序次序”
VFP的“排序次序”对字符串比较结果有影响。系统提供了Machine(机内码)、Pinyin(拼音)和Stroke(笔划)3种“排序次序”,系统默认“排序次序”是Machine。设置字符“排序次序”的方法有:
方法一:“工具”菜单→“选项”→“数据”选项卡→从“排序序列”下拉列表框中选择排序次序→“设置为默认值”→“确定”。
方法二:在命令窗口或程序中使用VFP命令方式。 命令格式:Set Collate To “<排序次序名>”
命令说明:排序次序名为Machine、Pinyin或Stroke之一,必须用单引号、双引号或方括号将排序次序名括起来。
1. Machine(机内码)
按机内码顺序:'︼' < '0' < '1' ?< '9' < 'A' <'B' ?<' Y' < 'Z' < 'a' < 'b' ? <'y'< 'z' < '<汉字>',汉字按拼音顺序由小到大排列。
【 例 2.59 】
Set Collate To 'Machine'
? '︼'<'2', '8'<'A’, ’a'<'A', ’Z’<’a’ && 输出:.T. .T. .F. .T. ? 'zz'<'阿', '阿'<'子' && 输出: .T. .T.
2. Pinyin(拼音)
按拼音排序:'︼' < '0' < '1' ? < '9' < 'a' <'A'< 'b' <'B' ?<'y'< 'Y'<'z' < 'Z' < '<汉字>',汉字按拼音顺序由小到大排列。
【 例 2.60 】
Set Collate To 'PinYin'
? '︼'<'2', '8'<'A’, ’a'<'A',‘Z’<’a’ && 输出:.T. .T. .T. .F. ? 'zz'<'阿','阿'<'子' && 输出:.T. .T.
3. Stroke(笔划)
排序次序: '︼' < '0' < '1' ? < '9' < 'a' <'A'< 'b' <'B' ? <'y'< 'Y'<'z' < 'Z' < '<汉字>'。汉字依据书写笔划的多少排序,笔划少的汉字小。
【 例 2.61 】
Set Collate To 'Stroke'
? '︼'<'2', '8'<'A’, ’a'<'A', 'Z’<’a’ && 输出:.T. .T. .T. .F. ? 'zz'<'阿', '阿'<'子' && 输出:.T. .F.
2.6.3 子串包含运算
运算格式:<字符表达式1> $ <字符表达式2>
运算说明:若字符表达式1的值是字符表达式2值的子串,即字符表达式2的值完整地包含字符表达式1的值,则运算结果为真(.T.);否则,运算结果为假(.F.)。
【 例 2.62 】
X=\中文版\
? 'VFP中文版'$X , 'VFP6.0'$X && 输出结果为:.F. .T.
事实上,子串包含运算与表达式:AT(<字符表达式1>,<字符表达式2>)>0的作用完全相同。
2.7 逻辑表达式
逻辑表达式是逻辑运算符连接逻辑型数据构成的运算式,运算结果仍然是逻辑型数据真(.T.)或假(.F.)。
2.7.1 逻辑运算符
逻辑运算有“非”、“与”以及“或”3种运算符,功能说明及优先级别如表2.3。书写时Not、And或Or前后应加一个半角圆点(.)或空格。
表2.3 逻辑运算符
优先级别 1 2 3 逻辑运算符 .Not. Not ! .And. And .Or. Or 说 明 非运算 与运算 或运算 1. 非运算
运算格式:.Not. <逻辑值表达式>
运算说明:对逻辑值表达式值取反。即:若逻辑值表达式的值为真(.T.),则非运算结果为假(.F.);若逻辑值表达式值为假(.F.),则运算结果为真(.T.)。
【 例 2.63 】
? .NOT. 2>3 , !“a”<”ab” && 输出结果为: .T. .F.
2. 与运算
运算格式:<逻辑值表达式1> .And. <逻辑值表达式2>
运算说明:仅当逻辑值表达式1和逻辑值表达式2的值都为真(.T.)时,运算结果
才为真(.T.);否则,运算结果为假(.F.)。
【 例 2.64 】
A=1 B=2
? A=1 And B<3, A>0 And B>5, A>2 .And. B<3, A>2 .And. B>3 && 输出:.T. .F. .F. .F.
3. 或运算
运算格式:<逻辑值表达式1>.Or.< 逻辑值表达式2>
运算说明:仅当逻辑值表达式1和逻辑值表达式2的值都为假(.F.)时,运算结果才为假(.F.);否则,运算结果为真(.T.)。
【 例 2.65 】
Name=’张大伟’
? ‘张’$ Name .Or.‘伟’$ Name && 输出结果为:.T.
2.7.2 常用逻辑型函数
逻辑型函数是指返回逻辑值的函数。 1. 字母函数
函数格式:Isalpha(<字符表达式>)
函数说明:若字符表达式值的首字符是英文字母,则函数值为真(.T.);否则,函数值为假(.F.)。
【 例 2.66 】
? Isalpha(”A12b34cd”),Isalpha(”1a”),Isalpha(”*1a”) && 输出为:.T. .F. .F.
2. 数字函数
函数格式:Isdigit(<字符表达式>)
函数说明:若字符表达式值的首字符是数字,则函数值为真(.T.);否则,函数值为假(.F.)。
【 例 2.67 】
? Isdigit (\输出结果为:.T. .F.
3. 小写字母函数
函数格式:Islower(<字符表达式>)
函数说明:若字符表达式值的首字符是小写英文字母,则函数值为真(.T.);否则,函数值为假(.F.)。
【 例 2.68 】
? Islower (”aBc”), Islower (”Abc”) && 输出结果为:.T. .F.
4. 大写字母函数
函数格式:Isupper(<字符表达式>)