Informix 函数大全


目目目目 录录录录 INFORMIX 数据类型数据类型数据类型数据类型 .............................................................................. 2 表达式用途表达式用途表达式用途表达式用途 ................................................................................................ 3 表达式表达式表达式表达式 ......................................................................................................... 4 校正表达式 ............................................................................................................................... 4 条件表达式 ............................................................................................................................... 4 一般性 CASE 表达式 .............................................................................................................. 4 线形 CASE 表达式 .................................................................................................................. 5 常量表达式 ............................................................................................................................... 5 引号字符串表达式 ................................................................................................................... 6 函数清单函数清单函数清单函数清单 .................................................................................................... 6 ABS 函数 .................................................................................................................................. 9 DBINFO 函数 ......................................................................................................................... 10 CARDINALITY 函数 ............................................................................................................ 14 长度函数 ................................................................................................................................. 14 DATE 函数 ............................................................................................................................. 15 DAY 函数 ............................................................................................................................... 15 三角函数 ................................................................................................................................. 16 ACOS 函数 ............................................................................................................................. 16 ASIN 函数 .............................................................................................................................. 16 ATAN 函数 ............................................................................................................................. 16 ATAN2 函数 ........................................................................................................................... 16 COUNT 函数 .......................................................................................................................... 17 COUNT(*)函数 ................................................................................................................. 17 COUNT DISTINCT 和 COUNT UNIQUE 函数 ................................................................... 17 AVG 函数 ............................................................................................................................... 18 USER 函数 ............................................................................................................................. 18 DBSERVERNAME 和 SITENAME 函数 ............................................................................ 18 TODAY 函数 .......................................................................................................................... 18 CURRENT 函数 ..................................................................................................................... 18 DATETIME ............................................................................................................................. 19 COLUMN ............................................................................................................................... 19 Concatonation 运算符 ........................................................................................................... 19 DECODE 函数 ....................................................................................................................... 19 EXP 函数 ................................................................................................................................ 20 EXTEND 函数 ........................................................................................................................ 20 FILETOBLOB 函数和 FILETOCLOB 函数 ......................................................................... 21 HEX 函数 ............................................................................................................................... 22 IFX_ALLOW_NEWLINE 函数 ............................................................................................. 22 IPX_REPLACE_MODULE 函数 .......................................................................................... 22 INITCAP 函数 ........................................................................................................................ 23 LOCOPY 函数 ........................................................................................................................ 23 LOGN 函数 ............................................................................................................................ 24 LOGN10 函数 ......................................................................................................................... 24 LOTOFILE 函数 ..................................................................................................................... 25 LOWER 函数 ......................................................................................................................... 26 LPAD( 源字符串,长度,嵌入字符串 ) ................................................................................ 26 RPAD( 源字符串,长度,嵌入字符串 ) ................................................................................ 26 MAX( 数字列 |数字表达式 ) .................................................................................................... 26 MIN( 数字列 |数字表达式) ..................................................................................................... 26 MDY(expr1 ,expr2 ,expr3) ................................................................................................. 26 MOD( 被除数,除数 ) ............................................................................................................. 26 MONTH(date/dtime_expr) ..................................................................................................... 26 NVL( 表达式 1,表达式 2) .................................................................................................... 27 OCTET_LENGTH( 变量名 |列命 ) .......................................................................................... 27 POW( 底数,指数 ) ................................................................................................................. 27 RANGE( 数字列 |数字表达式 ) ............................................................................................... 27 REPLACE( 源字符串,匹配字符串,新字符串 ) ................................................................ 27 ROOT( 被开方数,指数 ) ....................................................................................................... 27 ROUND( 数字表达式,圆整系数 ) ........................................................................................ 27 SIN( 弧度 ) ............................................................................................................................... 27 SITENAME ............................................................................................................................ 27 STDEV( 数字列 ) ..................................................................................................................... 27 SUBSTR( 源字符串,开始位置,长度 ) ............................................................................... 27 SUM( 数字列 |数字表达式 ) ..................................................................................................... 28 TAN( 弧度 ) .............................................................................................................................. 28 TO_CHAR(DATE|DATETIME, 格式字符串 ) ........................................................................ 28 TO_DATE( 字符表达式,格式字符串 ) ................................................................................. 28 TODAY ................................................................................................................................... 28 TRIM([LEADING|TRAILING|BOTH] trim_expr FROM source_expr) ............................... 28 TRUNC( 表达式,截去系数 )................................................................................................. 29 UPPER( 源字符串 ).................................................................................................................. 29 VARIANCE( 数字列 ) .............................................................................................................. 29 WEEKDAY(date|dtime_expr) ................................................................................................. 29 YEAR(date|dtime_expr) ......................................................................................................... 29 INFORMIX 数据类型数据类型数据类型数据类型 BYTE 存储任何种类二进制数据 CHAR(n) 存储单个或多个字符序列, 包括字母、数字、符号 CHARACTER(n) 同 CHAR 相似 CHARACTER 同 CHAR,m 为最大长度 ,r VRAYING(m,r) 为最小保留空间 DATE 日期型 DATETIME 日期时间型 DEC 同 DECIMAL 相似 DECIMAL 定点数方式存储数值 DOUBLE PRECISION 双精度型 FLOAT(n) 浮点型 INT 同 INTEGER 相似 INTEGER 整 型 ( -2147483647 至 2147483647 INTERVAL 时间间隔 MONEY(p,s) 货币型 MULTISET(e) 存储一个集合 NCHAR(n) 同 CHAR NUMERIC(p,s) 同 DECIMAL,p 为总长度, s 为小数位数,s 为 0 表示存 储的为整数 NVARCHAR(m,r) 同 VARCHAR REAL 同 SMALLFLOAT Row, Named 行类型 SERIAL 类似 INTEGER,系统自动生 成值 SERIALS 类似 INTEGER,系统自动生 成值 SMALLFLOAT 浮点型 SMALLINT 短整型(-32767to32767 ) TEXT 存储可打印 ASCII 字符及 ctrl-j,ctrl-I,ctrl-l VARCHAR(m,r) 同 CHAR,最长 255 ) 表达式用途表达式用途表达式用途表达式用途 表达式类型 用途 算术运算符号 提供对表达式一个项目(一元操作符号)或一个项目(二 元操作符号)数学运算的支持 接合表达式 提供接合两个字符串值的功能 校正操作符 提供从一种数据类型显示校正到另一种数据类型的功能 列表达式 提供在数据操作语句中使用部分或全部列值的功能 条件表达式 提供根据条件测试结果返回数值的功能 常量表达式 提供在数据操作语句中使用直接数值的功能 构造器表达式 提供动态生成复杂数据类型的功能 函数表达式 提供在数据操作语句中使用内部函数或用户定义函数的 功能 语句本地变量表达式 指定如何在 SQL 语句其他地方使用定义的语句本地变量 (SQL) 合计函数 提供在数据操作语句中使用内部合计函数或用户定义合 计函数的功能 YEAR(date|dtime_expr) 返回 DATE 或 DTETIME 型日期中年份部分 的整数。( 4 位数字) 表达式表达式表达式表达式 校正表达式校正表达式校正表达式校正表达式 CAST (表达式:: target_data_type AS target_data_type ) 可以用 CAST AS 关键字或双冒号校正操作符(::)将一种数据类型的表达式校正为另一 种数据类型的表达式。 下例显示两种不同方法,将 x 与 y 的和转换为用户定义类型 user_type 。两种方法产生相同 的结果,都要求存在 x+y 返回的类型与用户定义类型间转换的显式或隐式校正。 Cast(x+y) AS user_type (x+y):: user_type 例 insert into test(a,b,c,e,f,g) values ("2abc", '12-2-06’::date ,3456666,23.2,555,23.56); 条件表达式条件表达式条件表达式条件表达式 条件表达式返回值取决于条件测试的输出,下列框图显示条件表达式的语法。 CASE 表达式 CASE 表达式使用 SELECT 语句之类的 SQL 语句可以根据某个条件测试求值为真而返回几 个可能值之一。CASE 表达式有两种形式, 搜索条件和结果值表达式中可以包含子查询。 CASE 表达式中可以嵌套另一个 CASE 表达式。 合计表达式中出现 CASE 表达式时,不能在 CASE 表达式中使用合计函数。 一般性一般性一般性一般性 CASE 表达式表达式表达式表达式 一般性 CASE 表达式测试 WHEN 子句中的真值条件,并在发现真值时返回 THEN 子句中指 定的结果。 CASE WHEN 条件 THEN expr ELSE expr END 例: SELECT cust_name, CASE WHEN number_of_problems=0 THEN 100 WHEN number_of_problems>0 AND number_of_problems<4 THEN number_of_problems *500 WHEN number_of_problems >=4 and number_of_problems<=9 THEN number_of_problems*400 ELSE ( number_of_problems *300) +250 END , Cust_address FROM custtab 在一般性的 CASE 表达式中,所有结果应为相同类型,否则应求值为共同兼容的类型。如 果所有 WHEN 子句中的结果不是相同类型,或不求值为共同兼容的类型,否则会发生错误。 线形线形线形线形 CASE 表达式表达式表达式表达式 线形 CASE 表达式测试 CASE 关键字后面的数值表达式与 WHEN 子句中的数值表达式是否 匹配。 CASE expr WHEN expr THEN expr ELSE expr END 例: SELECT title CASE movie_type WHEN 1 THEN ‘HORROR’ WHEN 2 THEN ‘COMEDY’ WHEN 3 THEN ‘ROMANCE’ WHEN 4 THEN ‘WESTERN’ END, Our_cost FROM movie_titles 在线形 CASE 表达式中,所有 WHEN 子句中的数值表达式类型应有 CASE 关键字后面的数 值表达式类型兼容。 常量表达式常量表达式常量表达式常量表达式 下列框图显示了常量表达式的语法: 引号字符串 直接数数值 USER SITENAME DBSERVERNAME TODAY CURRENT DATETIME 字段限定符 直接数 DATETIME 直接数 INTERVAL Num UNITS datetime_unit 直接数集合 直接行数 Literal opaque type Literal BOOLEAN 元素 用途 限制 语法 Datetime_unit 指 定 间 隔 精 度 的 单 位 , 即 YEAR、 MONTH、 DAY、 HOUR、MINUTE、 SECOND 或 FRACTION 如果单位为 YEAR, 则 表 达 式 为 年 月 间 隔,否则表达式为日 时间隔 日 期 时 间 单 位 应 为 “用途”列所列的关 键字之一 关键字可以用大写或 小写字母 关键字不能放在引号 内 见限制列 Literal BOOLEAN BOOLEAN 值的直接 数表示 BOOLEAN 值 的 直 接 数 表 示 可 以 为 t(TRUE) 或 f(FALSE) 引号字符串 Literal opaque type 非透明数据类型的直 接数表示 相关非透明数据类型 的输入支持函数应认 识这个直接数 由非透明类型开发人 员定义直接数 num 指定日期时间单位数 的 直 接 数 数 字 详 见 “UNITS 关键字” 如果 num 不是整数, 则在使用时圆整化为 最接近的整数 n 指定的值应与选择 的日期时间单位对应 引号字符串表达式引号字符串表达式引号字符串表达式引号字符串表达式 下例显示引号字符串表达式: SELECT ‘The first name is’,fname FROM customer INSERT INTO manufact VALUES(‘sps’,’supersport’ UPDATE cust_calls SET res_dtime=’1997-1-1 10:45’ WHERE customer_num=120 AND call_code=’B’ 直接数表达式 下例显示直接数表达式 INSERT INTO items VALUES (4,35,52,’HRO’,`12,4,00) INSERT INTO acreage VALUES(4,5,2e4) SELECT unit_price +5 FROM stock SELECT-1 * balance FROM accounts 函数清单函数清单函数清单函数清单 名称 用途 ABS 函数 返回某个表达式样的绝对值 ACOS 函数 返回数字表达式的反余弦 加号运算符号(+) 可以将两个两个表达式相加 ASIN 函数 返回数字表达式的反正弦 ATAN 函数 返回数字表达式的反正切 ATANA2 函数 计算坐标(x,y )的极坐标(r, θ) AVG 函数 返回指定列或表达式中所有值的平均值 CARDINALITY 函数 返回集合(SET、MULTISET 或 LIST)中的 元素个数 CASE 表达式 根据求值为真的条件测试返回几个值之一 CAST 表达式(IDS) 将一种数据类型校正为另一种数据类型 校正操作符 见双冒号校正操作符 CHARACTER_LENGTH 函数 见 CHAR_LENGTH 函数 CHAR_LENGTH 函数 返回字符列中的逻辑字符数(而不是字节数) 列表达式 表中的完整或部分列值 接合操作符 接合两个表达式的输出 常量表达式 求值为常量值的表达式 COS 函数 返回弧度表达式的余弦 COUNT(一组函数) 提供一组计算列值和表达式的函数 调用每个函数时,在 COUNT 关键字后面指 定相应变元。 COUNT(ALL column )函数 见 COUNT(column )函数 COUNT(column )函数 返回指定列中的非 null 值个数 COUNT DISTINCT 函数 返回指定列中不同值(不包括 NULL)个数 COUNT UNIQUE 函数 返回指定列中不同值(不包括 NULL)个数 COUNT(*) 函数 返回符合查询条件的行数。如果不指定 WHERE 子句,则这个函数返回表中的总行 数 CURRENT 函数 显示当前时刻,返回由日期和时间构成的 DATETIME 值 DATE 函数 返回对应于所调用非日期表达式的 DATE 值 DAY 函数 返回表示当月日期的函数 DBINFO(一组函数) 提供一组函数,读取不同类型的数据库信息 调用每个函数时要指定相应 DBINFO 选项。 下面列出每个 DBINFO 选项 DBINFO(’coserverid’字符串加上表名限定的 列名加 ’currentrow’字符串)( EDS) 返回指定表中的每一行所在合作服务器的合 作服务器 ID DBINFO( ’coserverid’ 字 符 串 不 带 变 元 ) (EDS) 返回输入查询的用户所连接合作服务器的合 作服务器 ID DBINFO(‘dbhostname’选项) 返回客户机应用程序连接的数据库服务器主 机名 DBINFO(’dbspace’字符串加上表名限定的列 名加 ’currentrow’字符串)( EDS) DBINFO(’dbspace’字符串加 tblspace 号) 返回对应于一个 tblspace 号的 dbspace 名称 DBINFO(’serial8’选项)( IDS) 返回插入表中的最后一个序列值 DBINFO(‘sessionid’选项 ) 返回当前对话的对话 ID DBINFO(’sqlca.sqlerrd1’选项) 返回插入表中的最后一个序列值 DBINFO(’sqlca.sqlerrd2’ 选项) 返回选择、插入、删除、更新、EXECUTE PROCEDURE 语句和 EXECUTE FUNCTION 语句处理的行数 DBINFO(’version’ 选项) 返回客户机应用程序连接的数据库服务器具 体版本 DBSERVERNAME 函数 返回数据库服务器名 DECODE 函数 求值一个或几个表达式对,并比较每对中的 when 表达式与指定的数值表达式; DECODE 函数找到对中的 when 表达式与指 定的数值表达式之间的匹配时,它返回该表 达式对中的 then 表达式值 除运算符(/) 双冒号操作符 (::) 转换数据类型 EXP 函数 返回一个数值表达式的指数 EXTEND 函数 调整 DATETIME 或 DATE 值的精度 FILETOBLOB 函数 指定操作系统文件中存放的数据生成 BLOB 值 FILETOCLOB 函数 指定操作系统文件中存放的数据生成 CLOB 值 HEX 函数 返回整数表达式的十六进制编码 IFX_ALLOW_NEWLINE 函数 设置新行方式,在某个对话中允许使用引号 字符串中的新行符或禁止引号字符串中的新 行符 IPX_REPLACE_MODULE 函数 将装入共享数据库换成不同名称或地址的新 版本 INITCAP 函数 转换源表达式,使源表达式中每个单词以大 写字母开始,其余字母全部用小写字母。 LENGTH 函数 返回字符列中的字节数,不包括尾部空格 LOCOPY 函数 生成智能大型对象的备份 LOGN 函数 返回数字表达式的自然对数 LOGN10 函数 返回底数为 10 的对数 LOTOFILE 函数 将智能大型对象复制到操作系统文件中 LOWER 函数 将源表达式转换为小写字母 LPAD( 源字符串,长度,嵌入字符串 ) 左嵌入函数。长度指源字符串和嵌入字符串 的总长度 RPAD( 源字符串,长度,嵌入字符串 ) 右嵌入函数。长度指源字符串和嵌入字符串 的总长度 MAX( 数字列 |数字表达式 ) 求最大值函数。| 表示或 MIN( 数字列 |数字表达式 ) 求最小值函数 MDY(expr1 ,expr2 ,expr3) 返回 expr1 ,expr2 ,expr3 的 DATE 值,expr1 , expr2 ,expr3 均为整型数据,expr1 表示月, expr2 表示日,expr3 表示年,其中年用 4 位 整数表示。 MOD( 被除数,除数 ) 取模函数 MONTH(date/dtime_expr) 返回 DATE 或 DTETIME 型日期中月份部分 的整数 NVL( 表达式 1,表达式 2) 表达式 1 和表达式 2 必须是相匹配的数据类 型,并且不可以是主变量、BYTE、TEXT OCTET_LENGTH( 变量名 |列命 ) 返回字符列所占的字节数 POW( 底数,指数 ) 求底数的指数次方 RANGE( 数字列 |数字表达式 ) RANGE=MAX -MIN REPLACE(源字符串,匹配字符串,新字符串) REPLACE( 源字符串,匹配字符串,新字符 串) ROOT( 被开方数,指数 ) 指数!=0 ROUND( 数字表达式,圆整系数 ) 四舍五入函数 SIN( 弧度 ) 正弦函数 SITENAME 返回数据库服务器的名字 STDEV( 数字列 ) 标准差函数 SUBSTR( 源字符串,开始位置,长度 ) 取子字符串函数 ,长度指在源字符串中截取的 字符数。 SUBSTRING( 源字符串 FROM 开始位置 FOR 长度 ) 功能同 SUBSTR SUM( 数字列 |数字表达式 ) 求和函数 统计函数中的数字表达式不能含有统计函数 , 如 SUM(AVG( 数字列 )) 是错误的用法 ,统计函 数不能出现在 WHERE 子句中 TAN( 弧度 ) 正切函数 TO_CHAR(DATE|DATETIME, 格式字符串 ) 此函数的作用是按格式字符串指定的格式把 DATA、 DATETIME 型 数 据 转 换 成 子 符型 TO_DATE( 字符表达式,格式字符串 ) 此函数功能与 TO_CHAR 相反,用法类似 TODAY 返回 DATE 型系统时间 TRIM([LEADING|TRAILING|BOTH] trim_expr FROM source_expr) 此函数的作用是从 source_expr 中删去与 trim_expr 中相匹配的字符 TRUNC( 表达式,截去系数 ) TRUNC(24536.8746,-2)=24500 UPPER( 源字符串 ) 将源字符串全部转换为大写 USER 返回当前用户的用户名。 VARIANCE( 数字列 ) 方差函数 WEEKDAY(date|dtime_expr) 返回 DATE 或 DTETIME 型日期中日期部分 的整数。(从 0 到 6 ABS 函数函数函数函数 ABS (num_expression ) ABS 函数提供指定表达式的绝对值。例: SELECT order_num ,customer_num , ship_charge FROM orders WHERE ABS(ship_charge) >20 DBINFO 函数函数函数函数 DBINFO 函数实际上是一个返回数据库不同信息的函数集合。通过在 DBINFO 关键字后定 义一个特定选项来调用每个函数。可在 SQL 语句和 UDR 中任意地方使用 DBINFO 选项 。 下表显示用 DBINFO Option 获得不同的数据库信息。‘选项‘列显示了每个 DBINFO 选项 的名字,’用途‘列显示了 选项获得的该类数据库信息。 选项 用途‘ dbspace---tblspace_num 返回对应于 Tblspace_num 号的 dbspace 名 Sqlca.sqlerrd1 返回插入表中的最后一个序列值 Sqlca.sqlerrd2 返回选择、插入、删除、更新、EXECUTE PROCEDURE 语句或 EXECUTE FUNCTION 语句处理的行数 sessionid 返回当前对话的对话 ID Dbhostname 返回客户机应用程序所连接数据库服务器的 主机名 Verison 返回客户机应用程序所连接数据库服务器的 具体版本 Serial8 返回插入表中的最后一个 SERIAL8 值 Coserverid 返回输入查询的用户所连接合作服务器的合 作服务器 ID Coserverid table.column currentrow 返回指定表的每一行所在合作服务器的合作 服务器 ID Dbspace table.column currentrow 返回指定表的每一行所在的 dbspace 名 使用‘dbspace ’选项加 tblspace 号 ‘dbspace’选项返回对应于 tblspace 号的包含 dbspace 名的一个字符串,必须提供一个另外的 参数,即 tblspace_num 或者一个求值为 tblspace_num 的表达式。下面的例使用 ’dbspace’选项。 首先,查询 systables 系统目录表,确定表 customer 的 tblspace_num 列。然后执行该函数确 定 dbspace 名。 SELECT tabname, partnum FROM systables Where tabname=’customer’ 如果语句返回 10448892 分区号,可以将该值插入第二个变元中来找到包含 customer 表的 dbspace 。如下例所示: SELECT DBINFO (‘dbspace’,1048892) FROM systables Where tabname =’customer’ 如果想要查询 dbspace 名的表是分段表,必须查询 sysfragments 系统目录表查找每个表格分 段的 tblspace 号。然后在一个单独的 DBINFO 查询中寻找每个 tblspace 号确定表格分段的所 有 dbspaces 。 使用使用使用使用‘‘‘‘sqlca.sqlerrd1’选项选项选项选项 ‘sqlca.sqlerrd1’选项返回一个整数,提供插入表中的最后一个序列值。为了确保结果有效, 将这个选项放在将一行带序列值插入表中的单数 INSERT 语句后面。 下面的例子使用‘sqlca.sqlerrd1’选项: EXEC SQL create table fst_tab (ordernum serial,partnum int); EXEC SQL create table sec_tab (ordernum serial); EXEC SQL insert into fst_tab VALUES (0,1); EXEC SQL insert into fst_tab VALUES (0,4); EXEC SQL insert into fst_tab VALUES (0,6); EXEC SQL insert into sec_tab values (dbinfo(‘sqlca.sqlerrd1’)); 该例在 fst_tab 表中插入包含主关键字序列值的行,然后用 DBINFO 函数插入同一系列值到 sec_tab 表。DBINFO 函数返回插入 fst_tab 表中最后行的序列值。 使用使用使用使用‘‘‘‘sqlca.sqlerrd2’选项选项选项选项 : 该选项返回单个整数,提供 SELECT , INSERT, DELETE, UPDATE, EXECUTE PROCEDURE 和 EXECUTE FUNCTION 语句处理的行数。为了确保结果有效,在 SELECT,EXECUTE PROCEDURE 和 EXECUTE FUNCTION 语句已经完全执行后使用 该选项。为了确保在临时表中使用该选项有效,确定先读取所有行之后再关闭临时表。 下例演示 SPL 例程使用‘‘‘‘sqlca.sqlerrd2’选项选项选项选项确定表中被删除的行数。 CREATE FUNCTION del_rows( pnumb int) RETURNING int; DEFINE nrows int; DELETE FROM fst_tab where part_number=pnumb; LET nrows=DBINFO(‘sqlca.sqlerrd2); RETURN nrows; END FUNCTION 使用使用使用使用‘‘‘‘sessionid’选项选项选项选项:::: DBINFO 的该选项返回当前对话的对话 ID。 当客户机应用程序与一个数据库服务器连接,该服务器和这个客户机开始对话并分配一个 ID 给这个客户。对话 ID 是客户和数据库服务器之间唯一标识符。数据库服务器储存对话 ID 值在一个叫做控制块的共享内存中。对于一个给定的对话控制块也包括用户 ID,客户机进 程 ID,主计算机名和各种状态标识变量。 当使用‘sessionid’选项,数据库服务器从对话控制块中返回当前对话的对话 ID,并将这个 值作为整数值返回。Sysmaster 数据库中有些 system-monitoring interface(SMI )表格包括一个 对话 Id 列,因此可以用 DBINFO 函数获得的对话 ID 从 SMI 表中提取你自己的对话的信息。 在下例中,用户在一个 SELECT 语句中定义 DBINFO 函数以得到当前的对话 ID 的值。用户 在 systables 系统目录表中使用查询并使用 WHERE 子句将查询结果限制于一行。 SELECT DBINFO (‘sessionid’) AS my_sessinoid FROM systables WHERE tabname = ‘systables’ 在上例中,SELECT 语句查询 systables 系统目录表。然而,你可以通过查询数据库中任何系 统目录表或用户表获得当前对话的 ID。例如,可用下面的查询获得当前对话的对话 ID。 SELECT DBINFO (‘sessionid’) AS user_sessionid FROM customer Where customer_num=101 在 SPL 例程中也可使用 ’sessionid’选项。下例 SPL 函数返回当前的对话 ID 值到调用的例程 或程序: CREATE FUNCTION get_sess() RETURNING INT; RETURN DBINFO(‘sessionin’); END FUNCTION; 使用使用使用使用 ‘dbhostname’选项选项选项选项 该选项得到客户机应用程序所连接的数据库服务器的主机名。该选项得出数据库服务器运行 的计算机的实际计算机名称。 下例中,用户在 SELECT 语句中键入‘dbhostname’选项得到 DB-ACCESS 连接的数据库服 务器的主机名。 SELECT DBINFO (’dbhostname’) FROM systables WHERE tabid=1 下表显示查询结果 (constant ) rd_lab1 ‘ version’选项选项选项选项 可用 ‘ version’选项选项选项选项得出客户机应用程序连接的数据库服务器的确切版本号,从信息日志中得 出确切的版本号字符串。完整版本字符串的值 ononit 实用程序 -V 选项显示的结果相同。 可用 ‘ version’选项选项选项选项的 specifier 参数来 定义想要得到的版本字符串的那部分字符。下表是 specifier 参数所得出的对应的版本信息。以完全的版本字符串:Server version 9.20.UC1. 为例。 specifier 参数值 返回的版本信息 返回值 ‘server_type’ 数据库类型 Dynamic Server ‘minor’ 当前服务器主要的版本号 9 ‘minor’ 当前服务器次级的版本号 20 ‘os’ 版本信息字符串的操作系统 标识符 T=windows NT U= 运行在 32-bit 操作系统的 32-bit UNIX H= 运行在 64-bit 操作系统的 32-bit UNIX F= 运行在 64-bit 操作系统的 64-bitUNIX U ‘level’ 当前服务器版本的过渡版本 C1 ‘full’ 如 oninit –V 显示的完全版本 信息 Dynamic Server Version 9.20.UC1 下例显示怎样在 SELECT 语句中用‘version’选项得出 DB-Access 客户连接的数据库服务器 主要的版本信息: SELECT DBINFO (‘version’,’major’) FROM systables WHERE tabid=1 下面是查询结果 (constant ) 7 使用‘serial8’选项 ‘serial8’选项选项返回一个整数,得出插入表中的最后 SERIAL8 值。为了确保结果有效, 在插入了 SERIAL8 值的 INSERT 语句 后面使用该选项。 下例使用了‘serial8’选项: EXEC SQL Create table fst_tab (ordernum serial8,partnum int); EXEC SQL cerate table sec_tab (ordernum serial8); EXEC SQL insert into fst_tab VALUES (0,1) EXEC SQL insert into fst_tab VALUES (0,4) EXEC SQL insert into fst_tab VALUES (0,6) EXEC SQL insert into sec_tab Select dbinfo (‘serial8) From sec_tab where paartnum=6; 该例将包含主关键字 SERIAL8 值的行插入 fst_tab 表在中,然后用 DBINFO 函数将同一 SERIAL8 值插入 sec_tab 表中。DBINFO 函数返回的是插入 fst_tab 的最后一行的 SERIAL8 值。最后一行的子查询包含一个 WHERE 子句,因此返回一个单独的值。* 使用使用使用使用 ‘conserverid’选项不带其他变元选项不带其他变元选项不带其他变元选项不带其他变元 使用‘coserverid’选项不带其他变元返回输入查询的用户所连接合作服务器的合作服务器 ID。 假定用下面的语句创建 mytab 表。 CREATE TABLE mytab (mycol INT) FRAGMENT BY EXPRESSION Mycol <5 in rootdbs.1 Mycol <5 in rootdbs.2 假定 名为 dbspace rootdbs.1 在 conserver 1 中,名为 dbspace rootdbs2 在 conserver 2 中。并 用下面的语句在 mytab 表中插入如下行: INSERT INTO mytab VALUES ( ‘1’); INSERT INTO mytab VALUES ( ‘6’); 最后假定进行如下查询时你登陆 conserver 1。这个查询显示 mycol 表中列值为 1 的行的所有 列值。该查询也显示你键入查询时所登陆的合作服务器 conserver ID. SELECT * .DBINFO (‘coserverid’) AS cid FROM mytab WHERE mycol=1 如下是查询结果 mycol cid 1 1 用用用用‘‘‘‘coserverid ’’’’选项加表名和列名选项加表名和列名选项加表名和列名选项加表名和列名 用‘coserverid ’选项加表名和列名加上‘currentrow’字符串返回指定表中每一行所在合作服 务器的合作服务器 coservert ID. 该选项在将多个合作服务器分段表格时特别有用。 下例中,用户要显示每行所在合作服务器的 coserver ID 和 mytab 表的所有的行和列。 SELECT *.DBINFO (‘coserverid’, mytab.mycol,’currentrow’) AS cid FROM mytab 下表显示查询结果 mycol cid 1 1 6 2 在 DBINFO 函数列中指定的列可以是任何指定表中的任何列。 用用用用‘‘‘‘dbspace’选项加表名和列名选项加表名和列名选项加表名和列名选项加表名和列名 用该选项加表名和列名加上‘currentrow’字符串返回指定表中每行所在 dbspace 的 dbspace ID。这个选项在多个 dbspaces 上分段表格式时特 0 别有用。 下例中,用户要求看见每行所属的 dbspace 的 dbspace ID 和 mytab 表中所有列和行。 SELECT *.DBINFO (‘dbspace’,mytab.mycol,’currentrow’) AS dbsp FROM mytab 如下是查询结果: mycol dbspace 1 rootdbs.1 2 rootdbs.2 在 DBINFO 中所指定的列可以是指定表中的任何列。 CARDINALITY 函数函数函数函数 该函数返回集合列(SET、MULTISET、LIST)中的元素个数。 例 假设 set_col 列包含下列值: (3,7,9,16 ,0) 下列 SELECT 语句返回 5 作为 set_col 列的元素数目: SELECT CARDINALITY (set_col ) FROM table 如果结合包含重复元素,则 CARDINALITY 计算各个元素。 长度函数长度函数长度函数长度函数 长度函数可以确定列、字符串或变量的长度。 LENGTH(CHAR_LENGTH CHARACTER_LENGTH OCTET_LENGTH ) 引号字符串 Variable_name Table.column 元素 用途 限制 语法 Column 指定表中的列名 列应为字符数据类型 标识符 Table 列所在的表名 表应存在 数据库对象名 Variable_name 包含字符串的宿主变 量或 SPL 变量 宿主变量或 SPL 变量 应为字符数据类型 名称应符合变量名的 语言特定规则 长度函数包括: ■LENGTH ■OCTET_LENGTH ■CHAR_LENGTH(也称 CHARACTER_LENGTH) 这些函数各有不同用途。 LENGTH 函数 LENGTH 函数返回字符列中的字节数,不包括尾部空格。对于 BYTE 或 TEXT 列,LENGTH 函数返回列中的全部字节数,包括尾部空格。 下例演示 LENGTH 函数的用法: SELECT customer_num,LENGTH(fname) + LENGTH(lname), LENGTH(‘How many bytes is this?’) FROM customer WHERE LENGTH(company)>10 在 ESQL/C 中,可以用 LENGTH 函数返回字符变量的长度。 OCTET_LENGTH 函数 OCTET_LENGTH 函数返回字符列中的字符数(而不是字节数), CHARACTER_LENGTH 是 CHAR_LENGTH 的同义词。 DATE 函数函数函数函数 DATE 函数返回对应于所调用非日期表达式的 DATE 值。可以指定能变为 DATE 数据类型 的数值表达式。通常指定求值为 CHAR、DATETIME 或 INTEGER 值的表达式。 下列 WEHERE 子句指定 CHAR 值非日期表达式 : WHERE order_date< DATE(‘12/31/97’) DATE 函数解释 CHAR 值非日期表达式时,它希望这个表达式符合 DBDATE 环境变量指定 的 DATE 格式。例如,假设执行下列查询时 DBDATE 设置为 Y2MD/ : SELECT DISTINCT DATE (‘02/01/1998 ’) FROM ship_info 则这个 SELECT 语句产生一个错误,因为 DATE 函数不能转换这个非日期表达式。DATE 函数将日期字符串的第一部分(02 )解释为年份,第二部分(01 )解释为月份,第三部分(1998 ) 是个 4 位数,但 DATE 函数需要 2 位数(有效日期值在 01 到 31 之间)。因此,它无法转换 这个非日期表达式。要在 DBDATE 设置为 Y2MD/ 时让 SELECT 语句顺利执行,非日期表达 式应为‘98/02/01 ’。 对非日期表达式指定正整数值时,DATE 函数将其值解释为 1899 年 12 月 31 日之后的天数 。 如果该值为负数,则 DATE 函数将其值解释为 1899 年 12 月 31 日之前的天数。下列 WHERE 子句指定 INTEGER 非日期表达式值: WHERE order_dateDAY(CURRENT) 三角函数三角函数三角函数三角函数 三角函数取一个变元,如下列框图所示。 COS Radian_expr SIN TAN ASIN Numeric_expr ACOS ATAN ATAN2 Y,x 元素 用途 限制 语法 Numeric_expr 作为 ASIN、ACOS 或 ATAN 函数变元的数 字表达式 表达式应求值为 -1 到 1 之间的值 表达式 Radian_expr 求值为弧度值的表达 式 表达式应求值为数字 值 表达式 X 表示直角坐标(x,y ) 中 x 的 表达式 表达式应求值为数字 值 表达式 y 表示直角坐标(x,y ) 中 x 的 表达式 表达式应求值为数字 值 表达式 弧度表达式公式 COS、SIN 和 TAN 函数取弧度(radian_expr )数作为变元。 如果要将度数换算为弧度值,用下列公式: # degrees *p/180=# radians 如果要将弧度值换算为度数,用下列公式: # radians *180/ p =# degrees COS 函数 COS 函数返回弧度表达式公式的余弦值。下例返回 anglestbl 表中度数列的余弦值,表达式 中的读数要换算为弧度值: SELECT COS (degrees*180/3.1416 )FROM anglestbl ACOS 函数函数函数函数 ACOS 函数返回数字表达式的反余弦值,下例返回(-0.73 )弧度反余弦值: SELECT ACOS (-0.73 )FROM anglestbl ASIN 函数函数函数函数 ASIN 函数返回数字表达式的反正弦值,下例返回(-0.73 )弧度反正弦值: SELECT ASIN (-0.73 )FROM anglestbl ATAN 函数函数函数函数 ATAN 函数返回数字表达式的反正切值,下例返回(-0.73 )弧度反正切值: SELECT ATAN (-0.73 )FROM anglestbl ATAN2 函数函数函数函数 ATAN2 函数计算坐标(x,y )的极坐标(r, θ)角度组件。下例对直角坐标(4,5)比较 angles 与θ: WHERE angles>ATAN2(4,5) --determinesθ for (4,5)and compares to angles 可以用下例所示的表达式确定直角坐标(4,5)的径向坐标长 r: SQRT(POW(x,2) + POW(y,2)) --determines r for (x,y) 可以用下例所示的表达式确定直角坐标(4,5)的径向坐标长 r: SQRT(POW(4,2) + POW(5,2)) -- determines r for (4,5) COUNT 函数函数函数函数 COUNT 函数实际上是一组函数,可以用不同方式计算列值和表达式。要调用 COUNT 函数, 可以在 COUNT 关键字后面指定特定变元。下面几节将介绍 COUNT 函数的每种形式。 COUNT((((*))))函数函数函数函数 COUNT(*)函数返回符合 SELECT 语句 WHERE 子句的行数。下例寻找 stock 表中多少行 的 manu_code 列取值为 HRO: SELECT COUNT (*)FROM stock WHERE manu_code=’HRO’ 如果 SELECT 语句不用 WHERE 子句,则 COUNT(*)函数返回表中的总行数 。下例寻找 stock 表中有多少行: SELECT COUNT(* )FROM stock 如果 SELECT 语句包含 GROUP BY 子句,则 COUNT(*)函数反映每组中的数值个数。下 例按名字组合,数据库服务器发现多个同名行时,选择这些行: SELECT fname,COUNT(*) FROM counter GROUP BY fname HAVING COUNT(*)>1 如果多行的值为 null, 则 COUNT(*)函数在计算时包括 null 列,除非 WHERE 子句显式将 其省略。 COUNT DISTINCT 和和和和 COUNT UNIQUE 函数函数函数函数 COUNT DISTINCT 函数返回列或表达式中的不同值个数,如下例所示。如果 COUNT DISTINCT 函数遇到 null, 则它将其忽略。 SELECT COUNT (DISTINCT item_num ) FROM item 如果指定列的每个值都为 null, 则 COUNT DISTINCT 不是将其忽略,而是对该列返回 0。 UNIQUE 关键字的含义在和 COUNT 关键字一起使用时,含义与 DISTINCT 相同。UNIQUE 返回列或表达式的非 null 唯一值个数。 下例用 COUNT UNIQUE 函数,与前面使用 COUNT DISTINCT 函数的示例是等价的; SELECT COUNT (UNIQUE item_num ) FROM item COUNT column 函数 COUNT column 函数返回列或表达式中的非 null 值总个数,如下例所示: SELECT COUNT (item_num ) FROM items 可以在指定列名之前加上 ALL 关键字以保证清晰,但无论是否包括 ALL 关键字,查询结果 都是相同的。 下例显示如何在 COUNT column 函数中包括 ALL 关键字: SELECT COUNT (ALL item_num ) FROM items 比较不同 COUNT 函数 可以用 COUNT 函数的不同形式读取表格的不同类型信息。下表 总结 COUNT 函数每种形 式的含义。 COUNT 函数 说明 COUNT(*) 返回符合查询条件的行数 如果不指定 WHERE 子句,则这个函数返回 表中的总行数 COUNT DISTINCT 或 COUNT UNIQUE 返回指定列中的唯一非 null 值个数 COUNT (column )或 COUNT(ALL column) 返回指定列中的非 null 值总个数 可以用一些示例显示 COUNT 函数不同形式之间的差别。下例对演示数据库中的 orders 表进 行查询。大多数示例对 orders 表的 ship_instruct 列进行查询。 AVG 函数函数函数函数 AVG 函数返回指定列或表达式中所有值的平均值。只能对数字列采用 AVG 函数。如果使用 DISTINCT 关键字,则平均值为指定列或表达式中唯一值的平均值。下列查询寻找平均价格: SELECT AVG (unit_price ) FROM stock WHERE stock_num=110 除非指定列中所有值均为 null ,否则忽略 null 值。如果指定列中所有值均为 null ,则 AVG 函数对该列返回 null 值。 USER 函数函数函数函数 USER 函数返回包含当前用户(即运行进程的人员)登陆名的字符串。 下列语句显示如何使用 USER 函数: INSERT INTO cust_calls VALUES (221,CURRENT, USER,’B’,’Decimal point off’,NULL,NULL) SELECT * FROM cust_calls WHERE user_id=USER UPDATE cust_calls SET user_id=USER WHERE customer_num=220 USER 函数不改变用户 ID 的大小写。 DBSERVERNAME 和和和和 SITENAME 函数函数函数函数 DBSERVERNAME 函 数 返回当前数据库所在安装的 ONCONFIC 文 件 中 定 义 的 或 INFORMIXSERVER 环境变量中指定的 数据库服务器名 。函数名 DBSERVERNAME 和 SITENAME 是同义词 。可以用 DBSERVERNAME 函数确定表格位置。例: SELECT DBSERVERNAME FROM customer TODAY 函数函数函数函数 TODAY 函数返 回 DATE 数据类型的系统日期 。如果指定 TODAY 为列的默认值,则它应为 DATE 列。 下例显示如何在 INSERT、UPDATE 或 SELECT 语句中使用 TODAY 函数: UPDATE orders(order_date) SET order_date=TODAY WHERE order_num=1005 CURRENT 函数函数函数函数 CURRENT 函数 返回当前的日期和时间值。 如果不指定日期时间限定符,则默认限定符为 YEAR TO FRACTION (3)。任何可以使用直 接数 DATETIME 的语境中都可以使用 CURRENT 函数。如果指定 CURRNET 为列的默认值, 则它应为 DATETIME 列,CURRENT 的限定符应符合列限定符,如下例所示: CREATE TABLE new_acct( col1 int, col2 DATETIME YEAR TO DAY DEFAULT CURRENT YEAR TO DAY) insert into test (a,b,c,e,f,g) values ("abc", current ,1234567890,34.5,33,350.22) DELETE FROM cust_calls WHERE Res_dtime< CURRENT YEAR TO MINUTE SELETE *FROM orders WHERE DAY (ord_date)
还剩28页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享pdf获得金币 ] 1 人已下载

下载pdf

pdf贡献者

stphenjobs

贡献于2013-08-15

下载需要 8 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf