500 likes | 713 Views
第 3 章 数值与数值运算. 第 3 章 数据与数据运算. 3-1 数据类型、常量和变量 3-2 Visual FoxPro6.0 的常用函数 3-3 操作符及表达式 3-4 小结. 3-1 数据类型、常量和变量. 3-1-1 数据类型
E N D
第3章 数据与数据运算 • 3-1 数据类型、常量和变量 • 3-2 Visual FoxPro6.0的常用函数 • 3-3 操作符及表达式 • 3-4 小结
3-1 数据类型、常量和变量 • 3-1-1 数据类型 在Visual FoxPro中所有的数据都具有类型,数据类型决定数据的存储方式和使用方式,即数据的取值范围和可以进行的操作。可以把数据存入各种类型的数据表、数组和内存变量中。Visual FoxPro6.0的数据类型分为两大类,一种适用于变量和数组,另一种适用于数据表中的字段。Visual FoxPro定义了13种字段类型和7种数据类型。13种字段类型是:字符型、数值型、浮动型、双精度型、整型、货币型、日期型、日期时间型、逻辑型、备注型、通用型、二进制字符型和二进制备注型。其中7种数据类型是:字符型、数值型、货币型、日期型、日期时间型、逻辑型和通用型。
3-1-2 常量 • 常量:在程序的运行过程中不改变其值的量 • 常量的种类: • 数值型常量 • 字符型常量 • 逻辑型常量 • 日期型常量 • 货币型常量
1.数值型常量 • 用整数、小数、科学计数法表示的数 • 举例: 85,-56.2, 1.256E3, 3.8E-2 等
2. 字符型常量 • 由一串字符组成的字符串 • 表示:用“”(双引号)、‘’ (单引号)、[] (方括号)括起来 • 举例: ’副教授’、”boy”、 [数据库系统]是合法常量,而””I am a boy””、’It’s abest’是非法常量。 注意:最长只能为254个字符
3.逻辑型常量 • 表示“真”或“假”的量 • 表示方法: • “真”——.T.、.Y.、.t.、.y. • “假”——.F.、.N.、.f.、.n. • 注意:两边的点不能少
4.货币型常量 • 表示货币值的量 • 表示:以$开头,4舍5入到小数点4位 • 举例: • $123.456789结果为123.4568
5.日期型常量 在Visual FoxPro6.0中日期型常量用花括号“{ }”作为定界符括起来,格式为: {^YYYY-MM-DD} 例如:{^2005/05/18},或{^2005-05-18}。 日期时间常量也必须用花括号括起来, 格式为: {^YYYY-MM-DD[hh[:mm[:ss]] [a|p]]} 例如:{^2005/05/19 10:04am}、 {^2005-05-21 11:32:14pm}。 但必须注意日期和时间之间必须有空格。 6.日期时间型常量
3.1.3 变量 在命令操作和程序运行过程中其值允许变化的量称变量,在Visual FoxPro6.0中使用的变量分为字段变量、内存变量两种。每个变量都必须有一个变量名,变量名是由字母、汉字、数字和下划线组成,但必须以字母或汉字。 1.字段变量 字段变量是数据表结构中的任意一个数据项。在一个数据表中,一个字段就是一个字段变量。字段变量在建立表结构时定义,修改表结构时可重新定义,或增删字段变量。字段变量的类型有13种。字段变量是一种多值变量,假设一个数据表中有10条记录,那么该数据表的每一字段就有10个取值,当用字段作变量时,它的当前值随着记录指针的移动而不断变化。
2.内存变量 内存变量是表结构之外独立存在于内存中的变量。内存变量可用来存储数据,定义内存变量时需为它取名并赋初值,内存变量建立后存储于内存中。Visual FoxPro6.0中共定义了6种类型的内存变量:数值型、字符型、日期型、日期时间型、逻辑型和货币型。可分为简单变量和数组变量。 (1) 内存变量赋值命令 格式1: 〈内存变量〉=<表达式〉 格式2: STORE <表达式> TO <内存变量表> 功能:计算〈表达式〉,然后将计算结果赋给内存变量。
(2) 表达式值显示命令 格式: ?/?? <表达式表> 功能:,将表达式的值显示在屏幕上。 【说明】 1.命令格式中的?/??可任选一个,它们的输出格式不同。? 表示从屏幕下一行的第一列起显示结果 ,?? 表示从当前行的当前列起显示结果。例如: ? Z && 在VFP主窗口中显示VFP6.0 ? s1 && 换一行后显示28 ?? “数据库应用”&& 接着上一个命令显示结果28的后面显 示“数据库应用” 2.<表达式表>是表示用逗号隔开的多个表达式组,命令执行时遇逗号就空一格。例如: ? “Z=”,Z && 显示Z= VFP6.0
3.系统内存变量 • 由VFP自动生成和维护的变量 • 一般以下划线开头 • 举例: • _DIARYDATE &&当前日期 • _CLIPTEXT &&剪贴板文本 • [例]通过_calcvalue系统变量将一个数字传到计算器中,激活计算器窗口并计算结果。 clear _calcvalue=20 activate window calculator • [例]往剪贴板中写入信息 _CLIPTEXT="hello!“ 查看剪贴板
4.数组变量 数组是具有相同名字、不同下标值的一组变量。数组中的每个数据值称为数组元素,每个数组元素在数组中的位置是固定的,可以通过称为下标的编号来进行访问。数组在使用时要由DIMENSION或DECLARE命令来定义。这两个命令完全相同,都是用于建立一维或二维数组。在Visual FoxPro6.0中,同一个数组元素在不同时刻可以存储不同类型的数据,在同一数组中,每个数组元素可以被赋予不同数据类型的值。
数组的定义 格式:DIMENSION |DECLARE <数组名> (<下标1>) [,(<下标2>)] [<数组名> (<下标1>) [,(<下标2>)]]… 例如:DIMENSION c(4) DIMENSION a(3) , b(2,3)
数组的赋值 SZ(1)=”ABCD”&& 给SZ(1)赋值,字符型,值:ABCD SZ(2)=23.45 && 给SZ(2)赋值,数值型,值:23.45 SZ(3)={^2005/09/02} && 给SZ(3)赋值,日期型,值:2005年9月2日 SZ(4)={^2005/11/02 9:00am} && 给SZ(4)赋值,日期时间型,值:2005年11月2日上午9点 BZ(5)=.T. && 给SZ(5)赋值,逻辑型,值:真
3-2 Visual FoxPro常见函数 函数的概念 Visual FoxPro6.0 0系统为用户提供了十分丰富的函数,灵活运用这些函数,不仅可以简化许多运算,而且能够加强和完善Visual FoxPro的许多功能。 函数的一般格式: <函数名>(<自变量表>) 函数的三要素:函数名、参数、函数值 如:ABS(-2)
3-2-1 数学运算函数 1.平方根函数SQRT() 【格式】 SQRT(〈数值表达式〉) 【功能】 计算并返回〈数值表达式〉的算术平方根。 【例 1】 ? SQRT(5*5) 5.00 2.绝对值函数ABS() 【格式】 ABS(<数值表达式>) 【功能】 计算并返回〈数值表达式〉的绝对值。 【例 2】 ? ABS(-43.29) 43.29
3.四舍五入函数ROUND() 【格式】 ROUND(〈数值表达式〉,〈有效位数〉) 【功能】 对〈数值表达式〉的值按指定的〈有效位数〉进行四舍五入。 【例3】 ? R0UND(3.14159,4), ROUND(1234.9962,0), ROUND(1234.567,-1) 3.1416 1235 1230 4.取整函数INT() 【格式】 INT(〈数值表达式〉) 【功能】 计算并返回〈数值表达式〉的整数部分。 【例 4】 ? INT(-76.93) -76
5.求模函数MOD() 【格式】 MOD(<被除数>,<除数>) 【功能】 返回<被除数>除以<除数>得到的余数值。 【说明】 在求摸运算中应注意以下几点: (1)除数不能为0。 (2)除数为正数,返回正数;如果为负数,返回负数。 (3)如果被除数与除数能够整除,结果为0。 (4)如果被除数与除数不能整除,且被除数与除数同号,则结果为被除数除以除数而得到的余数。即:MOD(X1,X2)=X1-INT(X1/X2)*X2 。 (5)如果被除数与除数不能整除,且被除数与除数异号,则结果为被除数除以除数而得到的余数再加上除数。 即:MOD(X1,X2)=X1-INT(X1/X2)*X2+X2 。 【例 5】 ? MOD(10,3) &&结果为:1 ? MOD(-10,-3) &&结果为:-1 ? MOD(-10,3) &&结果为:2 ? MOD(10,-3) &&结果为:-2
3-2-2 字符处理函数 1.取子串函数SUBSTR() 【格式】 SUBSTR(〈字符串表达式〉,〈起始位置〉 [,〈长度〉]) 【功能】 从〈字符串表达式〉中的〈起始位置〉截取子字符串,〈长度〉为所截取的子串的长度。 【例 1】store ”ABCDEFG” to CN ? SUBSTR(CN,4,2),SUBS(CN,1,4),SUBS(CN,6,3) DE ABCD FG 若省略〈长度〉,或者〈长度〉超过从〈起始位置〉到末尾的长度,则截取的子字符串为从〈起始位置〉到〈字符串表达式〉末尾的所有字符。例如: ? SUBSTR(”计算机程序设计教程”,11) 设计教程
2.求字符串长度函数LEN() 【格式】 LEN〈字符串表达式〉 【功能】 返回〈字符串表达式〉中所包含的字符个数,即字符串长度。 【例 2】 ? LEN(”Visual FoxPro6.0”) 16 3.搜索子串位置函数AT() 【格式】 AT(〈字符串1〉,〈字符串2〉[,<数值表达式>]) 【功能】 寻找〈字符串1〉在〈字符串2〉中首次出现的起始位置。若〈字符串2〉中不包含〈字符串1〉,则返回值为零。若有“数值表达式”(假设数值表达式为K),则寻找〈字符串1〉在〈字符串2〉中第K次出现的位置。 【例 3】 X=”Visual FoxPro 6.0” ? AT(”Fox”,X) && 显示结果为 8 ? AT(”fox”,X) && 显示结果为 0 ? AT(”o”,X) && 显示结果为 9 ? AT(”o”,X ,2) && 显示结果为 13
4.空格函数SPACE() 【格式】 SPACE(〈数值表达式〉) 【功能】 产生与〈数值表达式〉的值相同的空格数。 【例 4】 ? ”学生”+SPACE(4)+”情况” 学生 情况 在“学生”和“情况”之间产生了4个空格字符。
5.宏代换函数& 【格式】&<字符型内存变量> 【功能】取“字符型内存变量”的值。 【说明】 (1)宏代换是一种间接取值的操作,在&符号后面必须紧跟(无空格)一个己被赋过值的字符型内存变量的名字。 (2)若&<字符型内存变量>与后面的字符之间无空格分界时,应加上“.”符号作为分界符。 (3)宏代换的使用可以嵌套另一个宏代换,但不能嵌套自己。例如,X=“&X”的写法是错误的。 (4)对于数字字符串,可以通过&函数使其与其他数字进行计算。
【例 5】求宏代换。 <1>. CH=”X” X=9 ? &CH &&结果为:9 <2> TT=”学生成绩” USE &TT &&结果为:打开了“学生成绩.dbf”表文件。 <3> X=”2004” M=”+” Y=”&X.&M.1” ? Y &&结果为:2004+1 ? &Y &&结果为:2005
3-2-3 转换函数 1.数值转换为字符串函数STR() 【格式】 STR(〈数值表达式〉[,〈长度〉[,〈小数位如〉]]) 【功能】 将〈数值表达式〉的值转换为由〈长度〉和〈小数位数〉指定的字符串。如果〈长度〉值比〈数值表达式〉的整数位数还要小,则返回由〈长度〉个“*”组成的字符串。 【例1】 ? STR(1324.46,6,1) 1324.5 ? STR(1324.46,3,1),STR(1324.46,8,3) *** 1324.460
2.字符串转换为数值函数VAL() 【格式】 VAL(〈字符串表达式〉) 【功能】 将〈字符串表达式〉转换为数值型数据。 【例2】 ? VAL(”32”+”18”) 3218.00 ? VAL(”112GH”),VAL(”AB204”),VAL(”ASD”) 112.00 0.00 0.00
3.字符转日期函数CTOD() 【格式】 CTOD(〈字符串表达式〉) 【功能】 将“月/日/年”格式的〈字符串表达式〉转换为日期型数据。 【例3】 DA=”12/12/04” ? CTOD(DA) 12/12/04 4.日期型转换为字符串函数DTOC() 【格式】 DTOC(〈日期〉) 【功能】 将〈日期〉转换为相应的字符串。 【例4】 D={^2004/11/24} DT=DTOC(D) ? DT ?? LEN(DT) 11/24/04 8
3-2-4 日期和时间函数 • 格式:DATE() • 功能:返回系统日期 • 格式:TIME() • 功能:返回系统时间 • 格式:DATETIME() • 功能:返回系统日期时间 • 格式:YEAR(<日期>) • 功能:返回<日期>中的年份,4位整型 • 格式:month(<日期>) • 功能:返回<日期>中的月份 • 格式:day(<日期>) • 功能:返回<日期>中的日期 • 举例 • ? YEAR({^2001-10-23}) &&返回2001 • ? month(date()) &&返回当天的月份
3-2-5 测试函数 1.测试文件头函数BOF() 【格式】 BOF() 【功能】 该函数用于测试指定文件中的记录指针是否指向文件头。如果是则返回真值,否则返回假值。 【例】 测试文件记录是否指向文件头。 USE 学生档案.dbf ? BOF() && 显示结果为:.F. SKIP -1 && 移动记录指针到上一条记录命令 ? BOF() && 显示结果为:.T.
2.测试文件尾函数EOF() 【格式】 EOF() 【功能】 该函数用于测试指定文件中的记录指针是否指向文件尾。如果是则返回真值,否则返回假值。 【例】 测试文件记录是否指向文件尾。 USE 学生档案.dbf GOTO BOTTOM ? EOF() && 显示结果为:.F. SKIP && 移动记录指针到上一条记录命令 ? EOF() && 显示结果为:.T.
3.测试当前记录号函数RECNO() 【格式】 RECNO() 【功能】 测试指定表文件中的记录指针指向的记录号。若指定的工作区无打开的表文件,函数返回值为:0;若指定的表文件无记录或记录指针位于文件头,函数返回值为:1;若记录指针指向文件尾,函数返回值为末记录号加1。 【例 】 测试记录指针的当前位置(假设学生档案表中有10条记录)。 USE 学生档案.dbf GOTO BOTTOM ? RECNO() && 显示结果为:10 SKIP ? RECNO() && 显示结果为:11 GO TOP ? RECNO() && 显示结果为: 1 SKIP -1 ? RECNO() && 显示结果为: 1
4.“空”值测试函数 【格式】 ISNULL(<表达式>) 【功能】 判断表达式的运算结果是否为 NULL 值,如果是,则返回逻辑真,否则返回逻辑假。 【例4】 STORE .NULL. TO A ? A,ISNULL(A) &&结果为:.NULL. .T.
5.空值测试函数 【格式】 EMPTY(<表达式>) 【功能】 根据表达式的运算结果是否为 “ 空 ” 值, 返回逻辑真或逻辑假。 【说明】 (1).当表达式的结果是含有空字符串或空格时, EMPTY 函数值返回为 .T. , ISNULL 为 .F. 。 (2).当变量是 .NULL. 时, EMPTY 和 ISBLANK 函数为 .F.,ISNULL 为 .T. 。 (3).当变量是 0 时, EMPTY 函数为 .T. , ISNULL 和 ISBLANK 为 .F. 。
字符处理函数(补充) • 格式:LTRIM(<字符表达式>) • 功能:删除字符表达式值前的空格 • 格式:RTRIM(<字符表达式>或TRIM(<字符表达式>) • 功能:删除字符表达式值后的空格 • 格式:ALLTRIM(<字符串>) • 功能:将<字符串>前后的空格去掉 • 举例 • ?“AB”+SPACE(4)+”CD” &&返回 AB CD • ? ALLTRIM(“ ABCD ”) &&返回 ABCD • ?len(“ abcd”) &&返回5 • ?len(alltrim(“ ABCD “)) &&返回 4
3-3 操作符及表达式 操作符是表示数据之间运算方式的运算符号,一般根据处理数据类型不同可分为算术运算符、字符运算符、关系运算符、逻辑运算符四种。表达式是由常量、变量、函数、操作符及圆括号组成的算式。表达式中的操作对象必须具有相同的数据类型,如果表达式中有不同类型的操作对象,则必须将它们转换成同种数据类型。 3-3-1算术表达式 算术表达式是由数值型变量、常量、函数和数值操作符组成的。用于对数值型数据进行常规的算术运算。
运算符 含义 优先级 () 括号 低 **或^ 乘方 * 、 / :乘: 除 % 取模(或取余),取两数相除的余数 +、 - 加、减 算术运算符 高 • 举例: ? 5/3 结果:1.67 • ? 5%3 结果:2 • ? -3**2-5 结果:4.00 • ? 2*7%3^2+3 结果:8
算术运算符 • 举例 • ? 3/2 &&返回1.5 • ? 5.5%3 &&返回2.5 • ? Int(5/3) && 1,取得数值的整数部分 • ? 6^2 &&返回36 • ? {^2001-12-29}+4 &&返回2002-1-2 • ? {^2002-3-1} -{^2001-12-29} &&返回62 • ? {^2002-3-1} –1 &&返回{^2002-2-28} • ? {^2000-3-1} –1 &&返回{^2002-2-29}
3-3-2 字符表达式: 字符表达式是由字符型变量、常量、函数和字符操作符组成的。用于字符串的连接或者比较。 • 字符串操作符为: +:连接两个字符串。 -:连接两个字符串,并将第一个字符串尾部的空格移到第二个字符串的尾部。 $:判断第一个字符串是否是第二个字符串的子字符串。例如: LEN1=”Visual FoxPro6.0 ” LEN2=”数据库教程” ? LEN1+LEN2 && 结果为:Visual FoxPro6.0 数据库教程 ? LEN1-LEN2 && 结果为:Visual FoxPro6.0数据库教程 ? len(LEN1-LEN2) && 结果为:28
3-3-3 日期时间表达式 日期时间表达式是由日期时间型变量、常量、函数和日期时间操作符组成的。 日期时间操作符有: +:添加一个天数或秒数 -:减少一个天数或秒数 例如:? {^2005-04-04}+10 &&结果为:04/14/05 ? {^2005-04-30}-15 &&结果为:04/15/05 ? {^2003-08-04 10:10a}+10 &&结果为:08/04/03 10:10:10 AM ? {^2003-08-04 10:35p}-10 &&结果为: 08/04/03 10:34:50 PM
关系运算符 含 义 关系运算符 含 义 < 小于 <= 小于等于 > 大于 >= 大于等于 = 等于 #,<>,!= 不等于 = = 精确相等 3-3-4 关系表达式 关系表达式用于数值、字符、日期型数据的比较运算。关系表达式的运算优先级相同。 例如: ? ”xyz”#”XYZ” && 值为.T. ? ”abcd”=”abc” && 值为.T. ? ”abc”=”abcd” && 值为.F. ? ”abcd”==”abc” && 值为.F.
运算符 含 义 优先级 ( ) 分组符号 低 .NOT. 逻辑非 .AND. 逻辑与 .OR. 逻辑或 3-3-5 逻辑表达式 逻辑表达式是由逻辑型变量、常量、函数和字符运算符组成的。用来对逻辑型数据进行各种逻辑运算,形成各种简单的逻辑结果。 高 例如 ? 17>33 .AND.34>12 && 值为.F. ? 16/2>7 .0R. ”abc”#”ABC” .AND. NOT.F. && 值为.T.
在多个逻辑值中进行判断,一般用于判断某几个条件是否满足在多个逻辑值中进行判断,一般用于判断某几个条件是否满足 • 运算对象和运算结果均为逻辑型 • 运算符 • OR或.OR.:逻辑或,只有两个运算对象均为.F.时,返回.F.;其余均返回.T. • AND或.AND.:逻辑与,只有两个运算对象均为.T.时,返回.T.;其余均返回.F. • NOT或.NOT.:逻辑非,运算对象为.T.时,返回.F.;运算对象为.F.时,返回.T.
3-3-6 空值(null) 空值是一个重要的概念。空值就是没有任何值。对数值,它非零;对字符,它非空格串;对逻辑,它非真非假。在应用中,空值的概念是十分有意义的。年龄不知道时,不能填零;姓名不知道时,不能填空字串等。 1.空值的表示 空值的表示为: .NULL. 2.变量中空值的表示 内存变量、数组变量、字段变量均可以赋以空值。变量赋以空值后,其类型不变。也就是说空值不是一个数据类型。 例:a=" " && a为空格字串 b="" && b为空字串 c=.null. && c赋以空值,但不改变其类型 ? empty(a),empty(b) &&结果为: .T. .T. ? isblank(a),isblank(b) &&结果为: .T. .T. ? isnull(a),isnull(b),isnull(c) &&结果为: .F. .F. .T. ? type("c") &&结果为: N
3.表达式中关于空值的处理 在函数的参数中(isnull()等例外)或表达式中因空值而使结果未知时,其结果就为空值。 例:m=0 m=.null. ? m+4 &&结果为:.null. x=.t. ? x and .null. &&结果为: .null. ? x or .null. &&结果为: .T. ? not .null. &&结果为: .null.
括号运算 • 算术运算 • 加、减 • 乘方 • 乘、除、取模 • 关系运算 • 所有关系运算同级 • 逻辑运算 • 与 • 或 • 非 表达式的运算顺序 • 运算符同级:从左到右 • 运算符不同级
表达式举例: • ? (SQRT(32*2)/4+6)*5-20 • ? (SQRT(32*2)/4+6)*5-20>30 • ? “cd”$ “abc”+”def” • ? Date()={^2002-3-8} • A=5 b=4 c=6 ? a>b and a>c ? A>b and a+b>c
3-4 小结 本章简要介绍了Visual FoxPro 6.0数据库系统中数据的基础概念。这一章的内容是学习后面章节和进一步开发数据库应用系统的必备的基础知识。要求读者全面掌握。 l掌握数据类型和数据存储(常量、变量、数组、字段、对象)的方法 l掌握各类型数据运算的操作符、表达式 l掌握常用系统函数的用法 l掌握NULL值的处理方法
第3章 课后练习 • 思考与练习 一、1、2、3、4、5二、1、2、3、4、5 三、1、2、3、4、5