数据库技术 第03章 数据管理基础 数据 表达式和函数.ppt_第1页
数据库技术 第03章 数据管理基础 数据 表达式和函数.ppt_第2页
数据库技术 第03章 数据管理基础 数据 表达式和函数.ppt_第3页
数据库技术 第03章 数据管理基础 数据 表达式和函数.ppt_第4页
数据库技术 第03章 数据管理基础 数据 表达式和函数.ppt_第5页
已阅读5页,还剩133页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章数据管理基础 数据 表达式和函数 3 1数据3 2操作符和表达式3 3函数习题上机实验题 数据库技术是进行数据处理的有效手段和方法 在数据库系统中 用户通过数据库管理系统 即dbms 提供的功能 对数据库中各类数据进行相应的操作处理和组织管理 本章主要介绍visualfoxpro系统中各种数据的数据类型以及它们的表达式 为用户使用visualfoxpro系统进行数据操作和管理建立良好的基础 数据是数据库系统的操作和管理对象 人们通常使用各种各样的物理符号来表示客观事物 这些符号及其组合就是数据 计算机中所谓的数据就是计算机可以处理的一切对象 数据的概念包括两方面的含义 即数据内容和数据形式 数据内容是指所描述客观事物的具体特性 也就是数据的 值 数据形式则是指数据内容存储在媒体上的具体形式 也就是所谓的数据 类型 数据主要有数字 文字 声音 图形和图像等多种形式 3 1数据 数据是数据库系统的操作和管理对象 人们通常使用各种各样的物理符号来表示客观事物 这些符号及其组合就是数据 计算机中所谓的数据就是计算机可以处理的一切对象 数据的概念包括两方面的含义 即数据内容和数据形式 数据内容是指所描述客观事物的具体特性 也就是数据的 值 数据形式则是指数据内容存储在媒体上的具体形式 也就是所谓的数据 类型 数据主要有数字 文字 声音 图形和图像等多种形式 数据的概念包含数据内容和形式两个方面 数据形式就是数据的存储形式和使用方式 也称数据类型 和其他程序设计语句类似 visualfoxpro为了使用户建立和操作数据库更加方便 提供了多种数据类型 各种类型的数据可以保存在表 数组 变量及其他数据容器中 数据类型有一定的应用范围 下列数据类型均可应用于表中字段数据类型的定义 但其中双精度型 浮点型 通用型 整型 备注型 二进制字符型和二进制备注型只能应用于字段 其余数据类型 如字符型 数值型 货币型 日期型 日期时间型和逻辑型 则可以用于变量 数组和字段 3 1 1数据类型 1 字符型 character 字符型数据是不具有计算能力的文字数据类型 用字母c表示 字符型数据由任意字符组成 包括中文字符 英文字符 数字字符和其他ascii字符 其长度 即字符个数 范围是0 254个字符 字符类型可以表示诸如姓名 名称 地址以及无需算术运算的数字号码 如学号 职工工号 电话号码以及邮政编码等 2 与数值相关的类型与数值相关的类型数据是表示数量 可以进行数值运算的数据类型 用它们来表示数量 且由数字 小数点 正负号和表示乘幂的字母e组成 数值精度达16位 在visualfoxpro系统中 按存储 表示形式与取值范围不同 有以下4种不同类型 1 数值型 numeric 数值型数据由数字 小数点 正负号和字母e组成 用字母n表示 数值型数据的取值范围是 0 9999999999e 19 0 9999999999e 20 包括正负号 小数点和字母e在内 其长度 数据位数 最大20位 通常用于表示实数 如235 123 15 1 3e 8 即1 3 108 等 2 浮点型 float 浮点型数据是数值型数据的一种 用字母f表示 它与数值类型完全等价 只是在存储形式上采用浮点格式 主要是为了得到较高的计算精度 3 双精度型 double 双精度型数据是具有更高精度的一种数值类型数据 用b表示 它采用固定长度浮点格式存储 占用8个字节 其取值范围是 4 94065645841247e 324 8 9884656743115e 307 4 整型 integer 整型数据是不包含小数部分的数值型数据 用i表示 整型数据只用于表示整数 如15 230 1234等 以二进制形式存储 占用4个字节 因此整型数据比数值型数据占用的空间要小 其取值范围是 2147483647 2147483646 3 日期型 date 日期型数据是表示日期的数据 用字母d表示 日期的默认格式是 mm dd yy 其中mm表示月份 dd表示日期 yy表示年份 日期类型数据的固定长度8位 visualfoxpro系统中提供了多种日期格式 但是需要通过相应的设置来改变 如命令setdate setmark setcentury 或在 工具 菜单中选择 选项 对话框的 区域 选项卡进行有关日期的设置 例如 02 10 03 表示03年2月10日 通过setcenturyon命令可以将年份改写为4位 即 02 10 2003 表示2003年2月10日 4 日期时间型 datetimes 日期时间型数据是表示日期和时间的数据 用字母t表示 在保存日期 时间二者兼有时 可以使用日期时间数据类型 日期时间的默认格式是 mm dd yyhh mm ss 其中mm dd yy的意义与日期型相同 而hh表示小时 mm表示分钟 ss表示秒数 日期时间型数据也是采用固定长度8位 第一个4字节保存日期 另一个4字节保存时间 取值范围是 日期为01 01 0001 12 31 9999 时间为00 00 00 23 59 59 如 02 10 200314 20 30 表示2003年2月10日14时20分30秒这一日期时间数据 日期时间类型的时间部分的格式取决于sethours和setsceonds命令的设置 另外还要注意如下规则 00 00 00am 等价于 12 00 00am 00 00 00pm 等价于 12 00 00pm 5 逻辑型 logic 逻辑型数据是描述客观事物真假的数据类型 表示逻辑判断的数据用字母l表示 逻辑型的数据只有两种值 真 t 或 y 和假 f 或 n 固定长度1个字节 是一种高效的存储方法 为区别其他数据类型 一般需在表示逻辑的字母前后加小圆点 如 t f 等 6 备注型 memo 备注型数据是用于在表中存储数据块 可以存放较多字符的数据类型 如个人简历 备注内容等具有较长文字内容的数据 可以把它看成是字符型数据的特殊形式 用字母m表示 备注型数据没有数据长度限制 仅受限于磁盘空间 它只用于表示字段类型的定义 字段长度固定为10个字节 它指向实际的备注内容 实际数据存放在与表文件同名的备注文件 fpt 中 长度根据数据的内容而定 7 通用型 general 通用型数据是存储ole 对象链接嵌入 对象的数据类型 用字母g表示 通用型数据中的ole对象可以是电子表格 文档 图形 图片等 它只用于表中字段类型的定义 通用型数据字段长度固定为10字节 实际数据长度仅受限于磁盘空间 ole对象的实际内容 类型和数据量大小取决于链接或嵌入ole对象的操作方式 如果采用链接ole对象的方式 则表中只包含ole对象的引用说明 以及对创建该ole对象的应用程序的应用说明 如果采用嵌入ole对象方式 则表中除包含对创建ole对象的应用程序的引用说明外 还包含ole对象的实际数据 8 货币型 currency 货币型数据是为存储货币金额而使用的一种数据类型 当涉及货币时 可使用货币类型代替数值类型 默认保留4位小数 长度为8个字节 用字母y表示 如 1234 56 其中 为美元符号 货币类型的取值范围是 922337203685477 5808 922337203685477 5807 9 二进制字符型和二进制备注型这两类数据是以二进制格式存储的数据类型 只能用在表中字段数据的定义 所存储的数据不受代码页改变的影响 二进制字符类型字段最长不超过254个字符 它是在各种代码页间保持不变的字符数据 如保存在表中的用户口令 可用于不同国家 二进制备注型字段在表中占4个字节 它是在各种代码页间保持不变的备注字段数据 用于不同国家的登录脚本 常量是在命令或程序中可以直接引用 具有具体值的命名数据项 其特征是在整个操作过程中它的值和表现形式保持不变 visualfoxpro按照常量取值的数据类型将常量分为6种类型 即数值型 浮点型 字符型 逻辑型 日期型 日期时间型 visualfoxpro系统还可以创建预编译常量 这种常量在设计阶段先预定为一个具体的值 以后凡需要用到此值的地方都可以用该预编译常量代替 编译之后 凡在源代码中出现该常量的地方都用该常量的具体值来置换 这样 只要改变一个预编译常量的值 就可以影响到整个应用程序 3 1 2常量 预编译常量必须定义其值 所以系统提供了 define预处理命令 给常量赋值 如下所示 definen123 definechar 字符 上述两条预编译命令的功能是定义了一个数值型预编译常量n和一个字符串常量char 故在程序中 凡是要用到123或 字符 的地方都可用n或char代替 编译之后 凡在源代码中出现n或char的地方都被123或 字符 代替 如果要把程序中的数值123改为456 或字符串 字符 改为 字符串 则不需要到程序中的每一处去修改 只需在上述预编译命令中修改一次即可 如下所示 definen456 definechar 字符串 值得注意的是 在程序中的预编译常量名不能再用它作为变量名 不能对它赋值 可以通过 undefn和 undefchar释放预编译常量n和char 1 数值型常量由数字 小数点和正负号组成 表示整数或实数值 如120 560 15 12 5214 687等分别是数值型常量中的整数和实数 2 浮点型常量这种常量是以浮点格式表示的数值常量 通常用来表示那些绝对值很大或很小 而有效位数不太长的一些数值 对应于日常应用中的科学记数法 如960万 以实数形式表示为9600000 以科学记数法的乘幂形式表示是9 6 106 13亿 以实数形式表示是1300000000 以科学记数法的乘幂形式表示是1 3 109 显然用科学记数法形式表示比较简洁 方便 对应的 采用浮点型常量分别表示为9 6e 6和1 3e 9 其中 9 6和1 3称为尾数 表示有效数字 6和9称为阶码 表示幂指数 阶码只能是整数 尾数可以是整数 也可以是小数 阶码和尾数均可正可负 3 字符型常量由任意ascii字符 汉字和汉字字符组成的字符型数据 字符型常量也称为字符串 为了与其他类型常量 变量和标识符相区别 visualfoxpro系统为字符串设置了3组定界符 如一对双引号 一对单引号 一对方括号 表示一个字符串时 只需使用它们中的任意组都可以 例如 happynewyear 新年好 欢迎进入visualfoxpro系统 这些均可表示为字符串 也就是字符型常量 4 逻辑型常量逻辑型常量就是表示逻辑判断结果 真 与 假 或者 满足 与 不满足 的逻辑值 逻辑常量只有两种值 分别用 t 或 y 和 f 或 n 表示 真 满足 和 假 不满足 表示时一般应在逻辑常量的字母左右加小圆点 以示与其他数据类型常量 变量 标识符等的表示相区分 5 日期型常量日期型常量表示日期值的数据 为了与其他表示加以区分 日期型常量需用 作为它的定界符 如 02 10 2003 表示2003年2月10日这个日期常量 6 日期时间型常量日期时间型常量是visualfoxpro系统提供的一种表示日期和时间值的常量形式 同样 为了加以区别 需用 作为定界符 如 5 1 200210 00am 表示2002年5月1日上午10时这个时间 变量是在操作过程中可以改变其取值或数据类型的数据项 其实质是内存中的一个存储单元的位置 其变量名是存储位置的符号标识 在visualfoxpro系统中 变量分为字段变量 内存变量和系统变量3类 此外 作为面向对象的程序语言 对象是一个很重要的概念 对象实质上也是一类变量 确定一个变量需要3个要素 变量名 数据类型和变量值 3 1 3变量 1 一般命名约定在visualfoxpro系统中 将表示和存储数据的常量 变量 数组 字段 记录 对象 表 数据库等 都称为数据容器 所有数据容器均需命名以相互区别 为规范各类标识符的命名 visualfoxpro系统推荐了若干 命名约定 供用户参考 以提高操作命令与程序的可读性和规范性 对于数据容器和一些命令 函数中所需参数的命名 用户应遵循以下一般规则 只使用字母 下划线和数字命名 命名以字母或下划线开头 除自由表中字段名 索引的tag标识名最多只能有10个字符外 其他的命名可使用1 128个字符 避免使用visualfoxpro系统中的保留字 如命令名 标准函数名等各种系统预定义项的名称 进行命名 以免造成系统区分和识别上的混乱 文件名的命名应遵循操作系统的约定 2 内存变量内存变量是在内存中定义的 一种单个数据元素的临时性变量 它独立于数据库文件而存在 使用时可以随时建立 一旦程序运行完毕 这些变量就自行释放 内存变量的作用是提高数据值的传递 运算和临时存放效率 1 内存变量的数据类型内存变量的数据类型有5种 数值型 字符型 逻辑型 日期型和日期时间型 内存变量的数据类型取决于创建时所赋值给它的值的类型 2 内存变量的创建创建内存变量就是给内存变量赋值 内存变量赋值既可以定义一个新的内存变量 也可以改变已有的内存变量的值或数据类型 内存变量赋值命令有两种 格式1 storeto其功能是将的值计算出来并赋值给指定内存变量表中的各个内存变量 内存变量表中变量名与变量名之间用逗号间隔 例如 store 20 40 2ton1 n2 n3 store iamastudent toc1 c2 上述例子 中是将 20 40 2表达式的值计算出来后分别赋值给变量n1 n2 n3 此时不但定义了内存变量的数值 而且还确定了内存变量的数据类型 n1 n2 n3变量均为数值型内存变量 同样 中是将 iamastudent 字符串赋值给字符变量c1和c2 格式2 其功能是将的值计算出来并赋值给指定的内存变量 该格式的功能与格式1基本相同 不同的是格式1可以同时给多个变量赋值 而格式2一次只能给一个变量赋值 例如 a 1b 学校 上述例子创建了两个变量a和b 其值分别是1和 学校 并由赋值而确定了a为数值型变量 b为字符型变量 3 内存变量的显示输出要想在变量创建后能看到变量内的值 visualfoxpro系统提供了两个简单的在屏幕上输出内存变量值的命令 格式1 at 格式2 at 其命令功能是计算表达式表中的各表达式的值 并在屏幕上指定位置显示各表达式的值 at子句选项指定表达式值从指定列开始显示输出 且at的定位只对它前面的一个表达式有效 即多个表达式必须用多个at子句分别定位输出 其中 先回车换行 再计算并输出表达式的值 在屏幕上的光标当前位置 计算并直接输出表达式的值 同样 表达式表中的各表达式之间用逗号间隔 各表达式的值输出时 以空格分隔 例如 20 30 40 a b c 上两条命令执行完毕后在屏幕上显示 203040abc又例如 a1 6a2 7 a1at20 a2at30显示结果如下 6 在第20列上 7 在第30列上 3 字段变量字段是与表相关的变量形式 数据表由若干记录组成 每个记录都包含若干数量相同的字段 同一字段在不同记录中分别对应不同的字段值 因此 字段也是变量 与内存变量不同的是 字段变量是定义在表中的变量 随表的存取而存取 因而字段变量是永久性变量 一旦一个数据表建立 就有了属于该数据表的一组字段变量 因为数据表中字段名最多只能包含10个字符 所以 字段变量名称长度不应超过10个字符 也就是字段名就是字段变量名 此种变量的数据类型可以是visualfoxpro中的任意数据类型 并在创建数据表结构时对每个字段名进行指定 4 系统变量系统变量是指以字符 开头的 由visualfoxpro系统自动定义生成的变量 它的名称是系统已经定义好的 是visualfoxpro系统特有的内存变量 例如 mfile medit mview等 因此在定义内存变量和数组名时 不要以下划线开始 以免与系统变量冲突 系统变量设置 保存了很多系统的状态 特性 了解 熟悉并充分运用系统变量 会给数据库系统的操作和管理带来方便 数组是一种特殊的内存变量 是一组具有相同名称 以下标相互区分的有序内存变量 其中的每一个数据值称为一个元素 即数组元素或下标变量 数组可以按它的下标个数分为一维数组 二维数组和多维数组 3 1 4数组 1 数组定义格式1 dimension 格式2 declare 两种格式功能完全相同 是定义一个或若干个一维或二维或多维数组 定义数组时 也可以使用方括号 即dimensiond 3 4 与dimensiond 3 4 功能一样 且均为合法数组定义命令 一旦定义了数组 系统在内存中就为数组开辟一块连续的数据存储区域 为存储数据块作准备 而数据区域的大小取决于格式中的数字表达式 即每一维下标的上限数值 下限从1开始 例如 dimensiona1 10 a2 4 3 a3 1 2 3 上面的数组定义语句定义了3个数组 具有10个数组元素 即10个下标变量 的一维数组a1 具有4行3列的一共12个数组元素 即12个下标变量 的二维数组a2 具有6个数组元素 即6个下标变量 的三维数组a3 2 数组使用任何一个数组被定义后 就可以使用这些数组 并对它们进行赋值 数组的类型与赋值的类型有关 每一个数组的单元是以下标来表示的 所以数组变量往往也称为下标变量 一维数组称为单下标变量 二维数组称为双下标变量 下标的起始值为1 因此 如果有以下定义 dimensiona n b n m 对于一维数组a来说 它的使用范围为1 n 即有n个下标变量可以存储数据 它们是 a 1 a 2 a 3 a n 对于二维数组b来说 它的使用范围为 1 n 1 m 即有n m个下标变量存储数据 它们是 b 1 1 b 1 2 b 1 3 b 1 m b 2 1 b 2 2 b 2 m b n 1 b n 2 b n m 例3 1 给相应的数组赋值并做相应的输出 程序段如下 dimensiona 2 4 b 2 store0toa 将数值0赋值给a数组中的每一个下标变量a 1 2 book a 2 4 rule a 1 1 ctod 02 10 03 a 1 3 150a 2 3 t store10tob 将数值10赋值给b数组中的每一个下标变量 a 1 1 a 1 2 a 1 3 a 1 4 a 2 1 a 2 2 a 2 3 a 2 4 b 1 b 2 该程序段运行之后将有如下结果 02 10 03book150000trule1010 3 数组与数据表互传数据数组与数据表互传数据具有传送数据多 传递速度快 程序简洁等特点 1 从数组向数据表传送数据格式1 将数组内容送当前记录 gatherfrom memvar fields 其功能是将数组或一组内存变量内容存入当前已经打开的数据表文件的当前记录中 传送时 将中的第1个元素内容复制到第1个字段 第2个元素内容复制到第2个字段 以此类推 若数组元素个数少于字段个数 则后面的字段内容不被替代 若数组元素个数多于字段个数 则后面的数组元素内容不复制 当选择memvar子句 则表示只有与字段名相同的数组或内存变量被替代 当选择 fields 选项时 表示只对用户指定的字段内容由数组或内存变量所替代 否则所有的字段内容都被替代 在书写时 字段名表中的字段名之间用逗号间隔 当选择 选项时 表示可以用数组或内存变量替代某备注型字段 否则 即使fields选项中选择了备注型字段 仍不能被替代 格式2 将数组内容追加到表文件中 appendfromarray for fields 其功能是将数组内容追加到当前已经打开的数据表文件的最末尾处 该格式中各选项的含义与格式1类似 数组元素追加到表文件中的方式也相同 惟一不同的是 格式2是将数组或内存变量中的数据追加到表文件的最末尾处 其作用可以通过该语句格式从内存中给一个表文件增加记录 而格式1中是用数组或内存变量中的数组替代当前记录 其作用是利用内存中的数据修改文件当前记录的值 例3 2 将数组中的数据传递到商品信息表中 商品信息表的结构如表3 1所示 程序段如下 dimensiona 5 a 1 110101 a 2 钢笔 a 3 英雄 a 4 k1 a 5 5 2usespxxappendblank gatherfromalistuse上述程序段的实际意义就是以数组a中的数据作为源数据 在spxx表文件的尾部追加一个空白记录 通过数组传递语句实现对这个空白记录的改写功能 即实现了追加一个新记录的目的 2 从数据表向数组传递数据格式1 将当前记录数据送入数组 scatter fields to toblank memvar memvarblank其功能是将当前已经打开的数据表的当前记录内容 以字段为单位复制到数组或一组内存变量中 若数组内存变量不存在 在系统自动生成数组或内存变量 其中 选择to子句是将字段内容按序分别复制到该数组对应次序的元素中 若数组不存在或数组元素个数少于字段个数 在系统将自动建立或重新建立该数组 若数组元素个数多于字段个数 则后面的数组元素内容将不被复制 选择toblank子句 则仅仅是建立一个数组 并不复制其内容 数组中的各元素与对应的字段有着相同的类型和宽度 但是数组内容是空的 选择memver子句 表示建立一个与字段名相同名字 相同类型和相同宽度的数组或内存变量 并将字段内容复制过去 以后 在使用这些内存变量时 应在变量名前加一个m 选择memvarblank子句 则表示建立一个与字段名相同名字 相同类型和相同宽度的数组或内存变量 且并不将字段内容复制过去 上述4种子句在每一个scatter语句中只能四选一使用 若选择 fields 选项时 表示只将用户指定的字段内容复制到数组或内存变量 书写时 字段名表中字段名之间用逗号间隔 否则 所有的字段内容都复制 若选择 选项时 表示可以将备注型字段的内容复制到数组或内存变量中 否则 备注型字段的内容不被复制 另外需要说明的是 所复制的字段类型可以是字符型 数值型 浮点型 日期型 逻辑型和备注型 格式2 将当前打开的表文件内容送入数组 copytoarray fields for while 其功能是在当前已经打开的数据表中 将用户知道范围内所有记录的有关字段内容全部复制到数组中 其过程是 将表文件中的第1个记录复制到数组的第1行 第1个字段复制到数组的第1个元素中 第2个字段复制到数组的第2个元素中 以此类推 如果不存在的话 系统将自动建立 命令中所复制的字段类型可以是字符型 数值型 浮点型 日期型 逻辑型 但是不允许是备注型 在格式中 若选择 fields 选项时 表示只将用户指定的字段内容复制到数组 书写时 字段名之间用逗号间隔 否则 所用的字段内容都被复制 若选择 选项时 表示只将用户指定范围内的那些记录进行复制 否则系统默认范围为all 即全部记录的范围 若选择 for 或 while 选项时 表示只对满足用户指定条件的那些记录进行复制 for选项为对指定范围内所有满足条件1的记录进行复制 while选项为对指定范围内满足条件2的记录进行复制 直到测试到第一个不满足条件2的记录为止 若不选这两项 则对每一个记录进行复制 例3 3 如表3 2商品信息表结构所示 程序段如下 dimensiona 5 usespxxscattertoa a 1 a 2 a 3 a 4 a 5 skipscattertoa a 1 a 2 a 3 a 4 a 5 use上述程序段的运行结果是 110101钢笔英雄k15 2110102钢笔英雄m210 8 操作符 也称运算符 是对数据对象进行加工处理的符号 根据其处理数据对象的数据类型 在visualfoxpro系统中 操作符分为数值操作符 字符操作符 日期操作符 关系操作符和逻辑操作符5类 通过操作符 将常量 变量 函数以及其他数据容器连接起来的有意义的式子 称为表达式 根据5类不同的操作符 构成了5类表达式 它们是算术表达式 字符表达式 日期表达式 关系表达式和逻辑表达式 3 2操作符和表达式 需特别指出的是 单个的常量 变量 函数是表达式的一种特例 在一个表达式中可能包含多个同类或不同类的操作符 但是对一个操作符来说 它的两个操作对象应该具有同一种数据类型 否则系统将会测试错误 在有多个操作符的表达式中 如何运算将由事先规定好的操作符运算优先级来决定 如果要人为改变运算优先级 可以通过圆括号来实现 在visualfoxpro系统中 各类操作符的优先级顺序如下 圆括号 数值和日期时间操作符 字符操作符 关系操作符 逻辑操作符 数值操作符数值操作符的操作对象是数值型数据 运算的结果仍然为数值型数据 数值操作符如下 或 乘方操作符 乘法操作符 除法操作符 模运算操作符 即求两数相除后的余数 加法操作符 减法操作符 3 2 1数值操作符和表达式 数值操作符的运算优先级为 或 由上面看出 优先级最高的是圆括号 其次是乘方运算 再者是乘法 除法 运算优先级最低的是加法 减法 乘法和除法 加法和减法为同级操作符 当遇到同级操作符时 运算顺序为先左后右 2 数值表达式数值表达式 又称算术表达式 其运算对象和运算结果均为数值型数据 它是通过数值操作符将数值型的常量 变量 函数等元素连接起来的有意义的式子 数值表达式的书写有一定的规则 所有符号在同一行上 所有的操作符不能省略 因为计算机运算时 严格按照操作符优先级以及从左到右的顺序进行 所以可以用圆括号改变运算优先级 例3 4 将下列数学表达式改写为数值表达式 1 1 75 1 860 52 69 859 2 3 解 数值表达式以及运算优先级为 有关数学标准函数部分可查阅函数附录 字符操作符字符操作符的操作对象是字符类型的数据 有3种字符操作符 两个字符串相连接 两个字符串相连接 并把前串尾部空格移到新字符串的尾部 测试操作符 两个字符串中 如果 符号左边的字符串包含在 右边的字符串中 则其值为 真 否则 其值为 假 字符操作符的操作对象为字符型数据 运算结果仍然为字符型数据 字符操作符的操作对象也是字符型数据 但运算结果为逻辑值 它们的运算优先级为 3 2 2字符操作符和表达式 2 字符表达式字符表达式是由字符操作符将字符型数据对象连接起来的有意义的式子 例3 5 字符表达式的应用 a abcd b defg c a bd a b c c d d a c b c a d b d执行了上述若干命令以后 显示结果如下 c abcddefgd abcddefgttft 1 日期操作符日期操作符的操作对象是日期型数据 日期时间型数据和数值型数据 日期操作符只有两种 在一个日期数据上增加一个天数 产生另一个日期 在日期时间数据上增加一个秒数 产生另一个日期时间数据 在一个日期数据或日期时间数据上减少一个天数或一个秒数 产生另一个日期数据或日期时间数据 两个日期型数据或两个日期时间型相减 结果为两个日期之间的间隔的天数或两个日期时间之间间隔的秒数 和 两个操作符的运算优先级相同 3 2 3日期操作符和表达式 2 日期表达式由日期操作符将一个日期型或日期时间型数据与一个数值型数据 日期型数据或日期时间型数据连接而成的有意义的式子 被称为日期表达式 例3 6 日期表达式的应用 a 02 11 2003 b 02 11 2002 c 02 11 200210 30 00 a 5 a 5 a b c 30 c 60运行结果如下 02 16 200302 06 200336502 11 200210 30 3002 11 200210 29 00 关系操作符关系操作符是指比较两个数据的大小或前后关系 关系操作符可以在数值型数据之间 字符型数据之间 日期型数据之间进行比较 关系操作符有如下7种 大于 等于 在进行字符串比较时 要受setexact命令的影响 精确等于 不受setexact命令的影响 或 或 不等于 小于或等于 3 2 4关系操作符和表达式 大于或等于 关系操作符的运算结果是逻辑型数据 即不是 真 就是 假 各关系操作符的优先级别相同 2 关系表达式由关系操作符将两个同类数据对象连接起来进行关系比较的有意义的式子 称为关系表达式 关系表达式运算时 就是比较同类的两个数据对象之间的 大小 关系 对于不同类型的数据 其 大小 的含义有所不同 如数值型数据比较的是值的大小 日期或日期时间型数据是比较日期或时间的先后顺序 而字符型数据比较的是在字符的ascii码的先后排列顺序 在visualfoxpro系统中 字符型数据的比较相对比较复杂 其规则如下 两个字符串进行比较的基本原则是从左到右逐个字符进行比较 但是 因系统相关设置状态不同 比较的结果与预期的不完全相同 相等比较 用操作符 进行两个字符串比较时 当setexactoff时 比较到达 右边的字符串末尾字符为止 当setexacton时 比较到达两个字符串的末尾字符为止 来判断两个字符串是否相等 系统默认为setexactoff 恒等比较 用操作符 进行两个字符串的比较时 称为恒等比较 不论setexact的设置如何 只有当两个字符串的长度相同 字符相同 排列一致时恒等才成立 大小比较 用操作符 或 进行两个字符串比较时 比较到第一个不相同字符为止 否则长度较长的字符串较 大 其他比较 除上述操作符之外的其他操作符如 或 相当于 或 相当于 或 相当于 或 只要其中一个运算成立 则运算成立 汉字比较 系统默认按汉字的拼音字母的英文顺序排列顺序 也就是以汉字的拼音顺序比较 大小 因此汉字比较实质上是以字母的顺序进行比较 但是visualfoxpro系统可以设置汉字以笔画排列顺序 此时 汉字的 大小 取决于其笔画的多少 例3 7 关系表达式应用 工资 600姓名 张三 日期 02 10 2002 20 400 姓名 张三 日期 date date 为当前日期函数 abc 2bc abc a2b abc abc a abc b a a ab ab a b ba ba b a setexacton ab ab a b ba ba b a 张三 李四 运行结果如下 fttfffttffttffttftttffttfffttftf 逻辑操作符逻辑操作符的操作对象是逻辑型数据 运算的结果依然是逻辑型数据 逻辑操作符前后一般要加圆点标记 以示区别 逻辑操作符有以下3种 not 或 逻辑非运算 and 逻辑与运算 or 逻辑或运算3种操作符的运算优先级别为 not and or 3 2 5逻辑操作符和表达式 2 逻辑表达式由逻辑操作符将逻辑型数据对象连接而成的式子称为逻辑表达式 逻辑表达式的运算对象与运算结果均为逻辑型数据 逻辑运算的运算规则如表3 3所示 其中a b表示两个逻辑型数据对象 在visualfoxpro系统中 有一种特殊的 数据 空值null 或 null 如数组变量定义而未赋值时 所有数组变量的默认值为null 字段可根据需要允许或限制其取空值 空值对于逻辑运算的影响如表3 4所示 例3 8 逻辑表达式的应用 a t b f a and b a or b not a not b not a and b or b not a and b or b nota and b or b not a and b or b 1 2 not 1 2 12 or 3 1 10 2运行结果如下 ftft ftftfttt 值得注意的是 对于两个逻辑型数据 一般不用比较的方式来确定它们之间的关系 而是直接运用逻辑运算的方式进行处理 如对数据表中的记录实现选择运算时 是用for或while进行逻辑判断 其中就是一个关系表达式或者是一个逻辑表达式 对于以逻辑字段进行逻辑判断的情况 一般不用关系表达式而直接用逻辑表达式 如 婚否 是一个逻辑字段 并约定其值 t 为已婚 f 为未婚 那么判断某记录对应人员是否已婚 用for婚否 而不用for婚否 t 如果判断是否未婚 则用for not 婚否 而不用for婚否 f 函数 function 是一段程序代码 用来进行一些特定的运算或操作 支持和完善命令的功能 帮助用户完成各种操作与管理 visualfoxpro系统有数百种不同函数 内容丰富 功能强大 如果能够熟练运用这些函数 便可轻松开发出功能强大的程序 visualfoxpro函数根据不同的分类标准 有不同种分类法 按函数的提供方式 可分为标准函数和自定义函数 按函数运算 处理对象和结果的数据类型 可分为数值型函数 字符型函数 逻辑型函数 日期时间型函数 数据转换函数等 3 3函数 按函数的功能和特点 可分为数据处理函数 数据库函数 文件管理函数 键盘和鼠标处理函数 输出函数 窗口界面操作函数 程序设计函数 数据库环境函数 网络操作函数 系统信息函数 动态数据操作函数等 与数学中的函数一样 visualfoxpro系统中的函数书写由函数名和自变量两部分组成 标准函数是系统提供的系统函数 其函数名是visualfoxpro的保留字 自定义函数是用户自己定义的函数 函数名由用户指定 函数书写格式规定 自变量必须用圆括号括起来 如有多个自变量 各个变量之间用逗号间隔 有些函数没有自变量或可以省略自变量 但也必须保留圆括号 自变量数据类型由函数的定义确定 使用函数时 自变量的数据形式可以是常量 变量 函数或表达式等 函数是一类数据项 与常量 变量类似 是一个数据元素 除了个别 如宏替换 函数外 函数都不能像命令一样单独使用 只能作为命令的一部分进行操作运算 由于系统函数很多 在此无法一一介绍 下面仅介绍一些较常使用的函数 为了简便起见 先对函数格式的描述统一采用如下形式 typeexp1 typeexp2 其中type是用小写字母表示的自变量的数据类型 exp表示上述任意形式的自变量 如nexp表示数值表达式 cexp表示字符表达式等 数值函数主要用于数值运算 其自变量与函数值均为数值型数据 1 取绝对值函数格式 abs 其功能是计算表达式的值 并返回该值的绝对值 例如 abs 5 2 5 先计算数值表达式的值为 5 然后取绝对值 显示5 abs 20 取20的绝对值 显示20 3 3 1数值函数 2 指数函数格式 exp 其功能是求以e为底 表达式值为指数的幂 即返回ex的值 例如 exp 1 显示值2 72 exp 1 显示值0 37 3 取整函数格式 int 其功能是计算表达式值 返回该值的整数部分 例如 int 37 3 显示12 int 8 5 显示 8 4 上界函数格式 ceiling 其功能是计算表达式的值 返回一个大于或等于该值的最小整数 例如 ceiling 17 34 ceiling 12 90 显示 18 12 5 下界函数格式 floor 其功能是计算表达式的值 返回一个小于或等于该值的最大整数 例如 floor 17 34 floor 12 90 显示 17 13 6 自然对数函数格式 log 其功能是求表达式值的自然对数 且表达式的值必须为正数 例如 log 2 7 log 2 4 显示 1 02 08 7 常用对数函数格式 log10 其功能是求表达式值的常用对数 同样表达式的值必须为正数 例如 log10 10 log10 4 2 显示 1 000 90 8 平方根函数格式 sqrt 其功能是求表达式值的平方根 且表达式的值必须是非负数 例如 sqrt 4 9 sqrt abs 4 9 显示 66 9 最大值函数格式 max 其功能是计算各表达式的值 将表达式值中的最大值作为返回值 例如 max 18 18 17 20 10 显示 20 10 最小值函数格式 min 其功能是计算各表达式值 将表达式值中的最小值作为返回值 例如 min 18 18 17 20 10 显示 18 11 求余数函数格式 mod 其功能是计算两个表达式的值 返回表达式1除以表达式2的余数 且余数的小数位数与表达式1的小数位数相同 正负符号与表达式2相同 例如 mod 15 2 mod 16 00 3 mod 3 20 显示 1 1 003 12 四舍五入函数格式 round 其功能是计算两个表达式的值 表达式2的值表示保留的小数位数 返回对表达式1的四舍五入的值 需要说明的是 如果表达式2的值为非负 表示需保留十进制小数位 如果表达式2的值为负数 其绝对值表示正数部分四舍五入的位数 即小数点前被舍入位数 如果表达式2的值为非整数 先对其取整再四舍五入 例如 a 123 456 round a 2 round a 1 round a 0 round a 2 round a 1 round a 1 5 显示 123 46123 5123100120123 5 13 符号函数格式 sign 其功能是返回表达式值的符号 如果值为正数 返回1 如果值为0 返回0 如果值为负数 返回 1 例如 sign 15 13 sign 28 12 sign 0 显示 1 10 字符函数是处理字符类型数据的一类函数 其自变量或函数值中至少有一个是字符类型的数据 1 子串位置函数格式 at 其功能是返回串表达式1在串表达式2中的起始位置 函数值为整数 如果串表达式2中没有包含串表达式1 则函数返回值为零 例如 at abc 123abc567 at 356 123abc567 显示 40 3 3 2字符函数 2 取左子串函数格式 left 其功能是返回串中的从左边第一个字符开始的个字符的子串 如果值超出串的长度 则全部取出 如果值不为整数 则自动取整后再取子串 如果值小于零 则按0处理 即所取的子串为空串 例如 left iamastudent 4 left 数据库管理系统 6 left 数据库管理系统 3 显示 iam数据库 3 取右子串函数格式 right 其功能是返回串中的从右边第一个字符开始的个字符的子串 如果值超出串的长度 则全部取出 如果值不为整数 则自动取整后再取子串 如果值小于零 则按0处理 即所取的子串为空串 例如 right iamastudent 7 right 数据库管理系统 8 right 数据库管理系统 3 显示 student管理系统 4 取子串函数格式 substr 其功能是返回串中的从左边第个字符开始的个字符的子串 如果 的长度超出串的长度 或者项默认 则从第个字符开始的以后的全部取出 如果超过串的长度 则所取的子串为空串 例如 1 substr iamastudent 6 2 substr 数据库管理系统 7 4 3 substr 数据库管理系统 15 显示 1 astudent 2 管理 3 不显示 因为是空串 5 字符串长度函数格式 len 其功能是返回串表达式的字符数 也就是字符串的长度 函数值为数值类型的数据 例如 len iamastudent a 数据库管理系统 len a 显示 1514 6 删除字符串前导空格函数格式 ltrim 其功能是删除串表达式的前导空格字符 例如 a 数据库 b 管理系统 a b a ltrim b 显示 数据库管理系统数据库管理系统 7 删除字符串尾部空格函数格式 trim 其功能是删除串表达式的尾部空格字符 例如 a 数据库 b 管理系统 c 数据库 a b trim a b ltrim trim c b显示 数据库管理系统数据库管理系统数据库管理系统 8 空格函数格式 space 其功能是返回个空格字符 例如 a 数据库管理系统 b 欢迎进入 b space 6 a显示 欢迎进入数据库管理系统 9 字符串替换函数格式 stuff 其功能是在中从指定位置开始 用串替换串中的个字符 串的长度和被替换字符的个数不一定相等 如果小于等于0 则直接插入 如果为空串 则删除串中的个字符 如果小于等于0 则从首字符开始替换 例如 a 欢迎进入visualfoxpro系统 stuff a 9 13 visualfoxpro stuff a 0 0 非常 stuff a s 1 逐步 stuff a 1 8 显示 欢迎进入visualfoxpro系统非常欢迎进入visualfoxpro系统欢迎逐步进入visualfoxpro系统visualfoxpro系统 10 大小写转换函数格式 转换成小写 lower 转换成大写 upper 其功能是将字符串中的字母转换成小写或大写 其他字符不变 例如 lower visualfoxpro7 0 upper visualfoxpro7 0 显示 visualfoxpro7 0visualfoxpro7 0 11 宏替换函数格式 其格式是替换出字符型变量cvar中的字符 如果宏替换后面还有非空的cexp串 则以 表示字符变量cvar结束 并将宏替换结果的值与cexp串的值连接起来 宏替换函数取代的字符串本身可以包含 函数 从而实现宏替换的嵌套 例如 aaa bbb bbb visualfoxpro7 0 aaa aaa显示 bbbvisualfoxpro7 0又如 a 12 b 15 b a显示 27 日期时间函数主要是处理日期类型或日期时间类型数据的函数 其自变量或为空或为日期型 日期时间型表达式 1 系统日期函数格式 date 其功能是返回当前系统日期 函数值的类型为日期型 例如 date 如果显示02 10 2003 则表示当前的系统日期为2003年2月10日 3 3 3日期时间函数 2 系统时间函数格式 time 其功能是返回当前系统时间 时间显示格式为hh mm ss 若选择了nexp项 则无论为何值 返回的系统时间都包括秒的小数部分 精确到小数点后两位 且该函数值为字符型 例如 time time 1 显示14 30 3014 30 30 45 3 日期函数格式 day 其功能是返回日期表达式中的天数 函数值的类型为数值型 例如 day 02 18 03 显示 18 4 星期函数格式1 dow 格式2 cdow 其功能是返回日期表达式所表示的日期的星期数 格式1返回1 7 函数值为数值型 格式2返回星期的英文名称 函数值为字符类型 例如 dow 2 9 2003 cdow 2 9 2003 显示 7sunday 5 月份函数格式1 month 格式2 cmonth 其功能是返回日期表达式所表示的这个日期的月份 格式1返回月份数1 12 故函数值为数值类型 格式2返回月份的英文名称 故函数值为字符类型 例如 month 2 9 2003 cmonth 2 9 2003 显示 2february 6 年份函数格式 year 其功能是返回日期表达式所表示的这个日期的所在年份 函数值为数值类型 例如 year 02 05 2001 year date 显示 20012003 在数据库应用过程中 一般同类数据才能进行正常的运算 此时 不同数据类型的数据必须将它们转换成同一类型 visualfoxpro系统提供了这样一类转换函数 1 ascii码函数格式 asc 其功能是返回字符串中的首字符的ascii码值 函数值为数值型

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论