将第一个字符串尾部的空格移到第二个字符串的尾部,然后,再将两个字符串连接起来。 【例】 ? “ABC “+”DEF” =“ABC DEF” ? “ABC “- “DEF”=“ABCDEF “
包含运算符$:检测左边的字符串是否被包含在右边的字符串中。 如果包含,返回逻辑真值(.T.),否则返回逻辑假值(.F.)。
精确比较运算符==:只有当两边的字符串完全相等时,才返回逻辑真值(.T.),反之假(.F.)。 (2)字符表达式:由字符串运算符将字符型常量、变量、函数等连接起来的式子。 例: ?”abc “+” bcd “ 结果为”abc bcd” ?“abc “-” bcd “ 结果为”abc bcd “ ?“book”$”bookstore” 结果为(.T.) ?“the”$”this” 结果为(.F.) ?“that”= =“that” 结果为(.T.) ?”that “= =“that” 结果为(.F.) 3、日期时间表达式
(1)日期型运算符:(+)、(-) 例如
? {04/03/99,12:30:20}+20 结果为:{04/23/99,12:30:40} ? {04/03/99, 12:30:20}- 20 结果为:{03/14/99,12:30:00} ? {03/03/99,12:30:20}- {03/3/99,11:30:20} 结果为3600
例如:已知某个人的出生日期为1979年7月20日,计算其现在年龄为多少? ({^2008/1/17}-{^1979/7/20})/365 注意:
(1)两个日期及日期时间型数据的相加是无意义的。
(2)+和-既可作为日期运算符,也可作算术和字符串运算符,而使用时具体做何种运算符受其所连接运算对象决定。
3.2.2 关系表达式
(1)关系运算符:小于(<)、大于(>)、等于(=)、不等于(<>、#或!=)、小于等于(<=)、大于等于(>=)。 (2)关系表达式:由关系运算符、数值表达式、字符表达式或日期表达式组合而成的式子,返回结果为逻辑型数据。
(3)关系运算符的两边,可以是字符表达式、数值表达式或者日期表达式,但两边的数据类型必须一致才能进行比较。
(4) =与= =不完全相同。前者称为普通比较,后者称为精确比较。
当环境设定为SET EXACT ON时,二者有一定区别;当环境设定为SET EXACT OFF时,结果是不同的。 比较时,使用右字符串去比较左字符串。当右字符串比较完,则比较结束。如果此时的比较结果相同,则=比较的值为.T.,而不管左字符串是否结束;相反,= =则要求左右必须完全一致,结果才为.T. 。 【例】?”abcde” = “abc”
当设置了SET EXACT OFF时,上述关系表达式结果为.T. 当设置了SET EXACT ON时,上述关系表达式结果为.F. (5)比较大小时,
日期早的日期型数据小于日期晚的日期型数据; 越早的越小,越晚的越大
如:{^2000-06-11}>{^2008-12-15}
(6)字符型数据比较时从左到右逐个比较,当某个字符不一样时,则两个不同字符的大小决定两个字符串的大小,字符的大小受命令设置影响.
例: ?”abc”>“ab” 结果为(.T.)
(7)字符串包含运算符”$”用于比较左字符串是否存在于右字符串中,如果存在,则为.T.,反之为.F.。 (8)比较货币或数值时,按数值及货币的大小比较 例: ?$564>$234 结果为(.T.) 例: ? “王”$”王红” 结果为.T. 1、字符排序次序的设置
当比两个字符串时,系统对两个字符串的字符自左向右逐个进行比较,一旦发现两个对应的字符不同,则根据这两个字符的排列次序决定两个字符串的大小,其字符的排列次序(即字符的大小)受设置命令的影响,其命令设置方法:
(1)在”工具”菜单下选择”选项”,打开”选项对话框,选择其中的”数据选项卡,再选择右上方的”排列序列”下列框中选择”Machine(机器)”,”PinYin(拼音)”,或者”Stroke(笔画)” (2)命令设置方式
命令:SET COLLATE TO “<排序次序名>“
次序名可以是:”Machine”,”PinYin”,或”Stroke” (3)字符的排列次序
Machine(机器)次序:西文字符按照ASCII码值排列,空格在最前面,大写ABCD字母序列在小写abcd字母序列的前面, 因此大写字母小于小写字母;对于汉字,据它们的拼音顺序决定其大小,其拼音第一个字母在后的值大.
例: ?”计算机”>“电脑” 结果为(.T.) ?”a”<“A” 结果为(.F.)
PinYin(拼音)次序:按照拼音次序排序,对于西文字符,空格在最前面,小写abcd字母序列在前,大写ABCD字母序列在后,即大写字母大于小写字母。
Stroke(笔画)次序:中文按照书写笔画的多少排序;对于西文与拼音方式相同。 3.2.3 逻辑表达式
逻辑表达式是由逻辑运算符将关系表达式连接起来的表达式,结果为逻辑真和逻辑假。 逻辑运算符有:.NOT(非).、.AND(与).和.OR(或).。 优先级别:.NOT.、.AND.、.OR.。 运算规则为: 注意点总结: And 逻辑与 遇假则假 Or 逻辑或 遇真则真 not或! 逻辑非 真假互换
【例】已知某28岁女职工工资为600元
? NOT. ( 性别=“女”) 结果为.F. ?性别=“女”.AND.年龄>=28 结果为.T. ?性别=“男” .AND.年龄>=28 结果为.F.
?性别=“女”.OR.年龄<28 结果为.T. 3.2.4 运算符的优先级
同一类运算符可同时出现在一个表达式中,其运算具有优先级,而对不同类型的运算符也有可能出现于同一表达式,此时也要据它们的优先级顺序来决定表达式的运算顺序. 不同类型运算符在同一表达式中的运算符优先级顺序为: 1、算术运算符:(),**或^,* / %, + - 2、字符串运算符和日期时间运算符: + - 3、关系运算符
4、逻辑运算符: NOT, AND ,OR
例: 12>2 .AND. ‘人’ < ‘人民’ .OR. .T.< .F.
先判数12>2,再判断’人’ < ‘人民’,再运算AND,之后再运算.T.< .F.,最后运算OR.
例: ((10%3) AND (15%2=0)) OR ‘电脑’ !=‘计算机’ 3.3 常用函数
函数是用程序来实现的一种数据运算或转换,每一个函数都有特定的数据运算或转换功能,它往往需要若干个自变量,即运算对象或参数,但函数只能有一个返回值,称为函数值或返回值,函数值的类型决定了函数的类型,其常见类型有: 函数的格式:函数名(参数1,参数2) 3.3.1 数值型函数 (1)、绝对值函数
格式:ABS (<数值表达式>)
功能:返回数值表达式的绝对值。
【例】 ? ABS (-12.34) 结果为12.34 (2)、最大值函数
格式:MAX (<数值表达式1>,<数值表达式2>) 功能:计算各数值表达式的值并返回最大值。 【例】? MAX(5*4,60/2) 结果为30 (3)、最小值函数
格式:MIN (<数值表达式1>,<数值表达式2>) 功能:计算数值表达式的值,返回最小值。 (4)、平方根函数
格式:SQRT (<数值表达式>) 25 5 功能:计算数值表达式的平方根。 注:其自变量表达式不能为负
【例】? SQRT (25*4) 结果为10 ? -SQRT(ABS(zz)) (5)、取整函数
格式:INT (<数值表达式>)
CEILING(<数值表达式>) FLOOR(<数值表达式>) 功能:
INT()返回数值表达式的整数部分. 【例】? INT (-4.68) 结果为-4 ****(6)四舍五入函数
格式:ROUND (<数值表达式>,<保留小数位数>) 功能:返回指定数值表达式指定位置后的结果。 说明:如果保留小数位数为正数n, 则对小数位进行四舍五入, 如果保留小数位数为负数n, 则对整数位进行四舍五入.
第0位指整数部分的第一位数即个位
【例】? ROUND (123.34567,3) 结果为123.346 ? ROUND (753.34567,-3) 结果为1000 (7)圆周率函数 格式:PI( )
功能:返回圆周率(数值型),无自变量
(8)求余函数(与%等同)
格式:MOD(<数值表达式1>,<数值表达式2>) 功能:
返回两个数相除后的余数.3%5 <数值表达式1>为被除数, <数值表达式2>为除数, 余数的符号与被除数相同, 如果被除数与除数同号,
则函数值即为两数相除的余数; 若被除数与除数异号,
则函数值为两数相除的余数再加上除数的值. 例:
?MOD(10,3),MOD(10,-3),MOD(-10,3),MOD(-10,-3) 则结果为: 1 -2 2 -1
注:首先将除数和被除数的符号忽略进行求余运算,得到X =1。 再将X的符号定为被除数的符号,得到Y=-1。
由于除数和被除数是异号,所以结果是:Y+除数=-1+3=2。 mod(15,-4)=-1 3+(-4) 15-12=3+(-4)=-1 mod(-15,4)=1 -3+4 -15+12=-3+4=1
1、满足MOD(X,2)=0这个表达式时,说明X是一个偶数。 2、满足MOD(X,2)=1这个表达式时,说明X是一个奇数。 3、MOD(X,5)=0
如下数列请描术它的通项公式。 (1) 1、9、17、25、33?? (2) 3、7、11、19、23??
MOD(X,8)=1或MOD((X-1),8)=0 MOD(X,4)=3或MOD((X+1),4)=0
3.3.2 字符型函数
字符型函数主要对字符型数据进行运算。 (1)、求子串位置函数 格式:
AT (<字符表达式1>,<字符表达式2>,[ <数值表达式n>]) ATC(<字符表达式1>,<字符表达式2>,[ <数值表达式n>]) 功能:
查找<字符表达式1>在<字符表达式2>中的起始位置。如果有<数值表达式n>,则确定<字符型表达式1>在<字符型表达式2>中的第n次出现的起始位置,若缺省<数值表达式n>默认为1;如果字符表达式1不是字符表达式2的子串,则返回为0。
【例】? AT (“A”,”BCDE”) ‘结果为0 ? AT (“A”,”ABADE”) ‘结果为1 ? AT (“A”,”ABCADE”,2) ‘结果为4 ATC函数不区分大小写
?ATC(“a”,”ABCDA”,1) (2)、截取子串函数
*****格式: SUBSTR (<字符表达式>,<起始位置>,[ <长度>])
功能:从指定的<起始位置>开始,在<字符表达式>中截取指定<长度>的字符串。
说明:假设起始位置为m,长度为n。若省略n,则从m开始截取以后的所有字符串; 若n大于从m开始的字符串长度,则从m开始截取以后的所有字符串;若m大于字符表达式的长度,则截取的字符串为
空白字符串。 【例】
?SUBSTR (“HARDWORK”,3,4) 结果为”RDWO”
? SUBSTR (“HARDWORK”,2) 结果为”ARDWORK” ?SUBSTR (“HARDWORK”,3,9) 结果为”RDWORK” ? SUBSTR (“HARDWORK”,9,5) 结果为” “ (3)、左截取子串函数
格式:LEFT (<字符表达式>,<数值表达式>)
功能:从字符表达式左边开始,截取<数值表达式>指定长度的字符串。 【例】
? LEFT (“HARDWORK”,3) ‘结果为”HAR” (4)、右截取子串函数
格式:RIGHT (<字符表达式>,<数值表达式>)
功能:从字符表达式右边开始向左截取<数值表达式>指定长度的字符串。 【例】
? RIGHT (“HARDWORK”,3) ‘结果为”ORK” (5)、生成空字符串函数 格式:SPACE (<数值表达式>)
功能:生成指定空格数的空字符串。
【例】? SPACE (3) ‘结果为” “ (6)、字符串长度函数
格式:LEN (<字符表达式>)
功能:求字符串的长度(包括空格)。 【例】? LEN (“how are you”) 11 ‘结果为11 ?Len(space(3)-space(6))
(7)、字符串替换函数 格式:
***STUFF (<字符表达式1>,<起始位置>, <长度>,<字符表达式2>)
功能:从指定的起始位置开始,用字符表达式2替换字符表达式1中指定个数的子串。
说明:替换与被替换的字符个数不一定相等;若长度为0,则将<字符表达式2>插入到字符表达式1中;若<字符表达式2>为空,则指定长度的字符串被删除.
【例】?STUFF (“computer”,3,4, “abc”) ‘结果为”coabcer”
?STUFF (“computer”,3,1, “abc”) ‘结果为”coabcputer” ?STUFF (“computer”,3,4,” “) ‘结果为”co er” (8)、删除前后空格函数 格式:TRIM(<字符表达式>)
LTRIM(<字符表达式>) ALLLTRIM(<字符表达式>) 功能:
TRIM()返回指字符表达式值去掉尾部空格后形成的字符串 LTRIM()返回指字符表达式值去掉前导空格后形成的字符串
ALLTRIM( )返回指字符表达式值去掉前导和尾部空格后形成的字符串 例:
STORE SPACE(1) + “TEST” + SPACE(3) TO SS