DB2数据库资料整理_第1页
DB2数据库资料整理_第2页
DB2数据库资料整理_第3页
DB2数据库资料整理_第4页
DB2数据库资料整理_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、一、DB2常用函数函数函数解释函数举例AVG() 返回一组数值的平均值SELECT AVG(SALARY) FROMB SEMPMS;OUNT()返回一组行或值的个数.SELECTCOUNT(*)FROMBSEMPMS;MAX() 返回一组数值中的最大值.SELECTMAX(SALARY)FROMBSEMPMS;MIN() . 返回一组数值中的最小值SELECTMIN(SALARY)FROMBSEMPMS;SUM() 返回一组数据的和.SELECTSUM(SALARY)FROMBSEMPMS;CEILING() 返回比参数大或等于参数的最小的整数值. SELECTCEILING(3.56)FR

2、OMBSEMPMS;DOUBLE()如果参数是一个数字表达式,返回与其相对应的浮点数,如果参数是 字符串表达式,则返回该数的字符串表达式.SELECTDOUBLE(5678)FROMBSEMPMS;CONCAT() CONCAT() CCOONNCCAATT() 返回两个字符串的连接SELECTCONCAT(EMP_NO,EMP_NAM)FROMBSEMPMS;Char()转化为字符串类型Select char(15.5000) froms ysibm.sysdummy1Date()转化为日期时间select date(2008-01-01) from sysibm.sysdummy1dayo

3、fyear(arg)返回arg在年内的天值Dayofweek(arg)返回arg在周内的天值days(arg)返回日期的整数表示法,从0001-01-01来的天数。midnight_seconds(arg)午夜和arg之间的秒数Monthname(arg)返回arg的月份名Dayname(arg)返回arg的星期current dat系统时间select current date from sysibm.sysdummy1current date + 1返回当前时间的下一天(年月 时 同理)select current date + 1 day from sysibm.sysdummy1cur

4、rentdate+1YEAR currentdate+3YEARS+2MONTHS+15DAYS currenttime+5HOURS-3MINUTES+10SECONDS使用英语来执行日期和时间计算currentdate+1YEAR currentdate+3YEARS+2MONTHS+15DAYS currenttime+5HOURS-3MINUTES+10SECONDSdays(currentdate)-days(date(1999-10-22)计算两个日期之间的天数days(currentdate)-days(date(1999-10-22)char(currentdate) char

5、(currenttime) char(currentdate+12hours)将日期或时间值与其它文本相衔接,那么需要先将该值转换成字符串har(currentdate) char(currenttime) char(currentdate+12hours)TIMESTAMP(2002-10-20-.000000) TIMESTAMP(2002-10-2012:00:00) DATE(2002-10-20) DATE(10/20/2002) TIME(12:00:00) TIME()要将字符串转换成日期或时间值TIMESTAMP(2002-10-20-.000000) TIMESTAMP(20

6、02-10-2012:00:00) DATE(2002-10-20) DATE(10/20/2002) TIME(12:00:00) TIME()Coalesce(arg1,arg2.)返回参数集中第一个非null参数。insert(arg1,pos,size,arg2)返回一个,将arg1从pos处删除size个字符,将arg2插入该位置。left(arg,length)返回arg最左边的length个字符串。locate(arg1,arg2,)在arg2中查找arg1第一次出现的位置,指定pos,则从arg2的pos处开始找arg1第一次出现的位置。posstr(arg1,arg2)返回a

7、rg2第一次在arg1中出现的位置。repeat(arg1 ,num_times)返回arg1被重复num_times次的字符串。replace(arg1,arg2,arg3)将在arg1中的所有arg2替换成arg3。right(arg,length)返回一个有arg左边length个字节组成的字符串。space(arg)返回一个包含arg个空格的字符串。substr(arg1,pos,)返回arg1中pos位置开始的length个字符,如果没指定length,则返回剩余的字符。coalesce空值处理函数select coalesce(comm,1000) from staff; Orac

8、le: select nvl(null,aaa) from dual;ltrim(rtrim( abc )默认去掉两端空格select ltrim(rtrim( abc ) from sysibm.sysdummy1ltrim( abc )只去掉左端空格select ltrim( abc ) from sysibm.sysdummy1rtrim( abc )只去掉右端空格select rtrim( abc ) from sysibm.sysdummy1upper(abc)或ucase(abc)回字符串大写值,select upper(abc) from sysibm.sysdummy1|或co

9、ncat合并字符串select concat(abcd,efg) from sysibm.sysdummy1select abcd | efg from sysibm.sysdummy1Ceil(arg)返回大于或等于arg的最小整数。Floor(arg)返回arg1除以arg2的余数,符号与arg1相同Mod(arg1,arg2)返回arg1除以arg2的余数,符号与arg1相同。Rand()返回1到10之间的随机数。Power(arg1,arg2)返回arg1的arg2次方Round(arg1,arg2)四舍五入截断处理,arg2是位数,如果arg2为负,则对小数点前的数做四舍五入处理。t

10、runcate(arg1,arg2)截断arg1,arg2是位数,如果arg2是负数,则保留arg1小数点前的arg2位。 来源:考试大-Oracle认证考试二、DB2和Oracle的 SQL写法的主要区别1、数据类型转换函数 整型转字符型字符串转整形字符串转浮点型浮点型转字符串字符串转日期字符串转时间戳日期转字符串ORACLEto_char(1)to_number(1)to_number(1.1)to_char(1.1)to_date(2007-04-26,yyyy-mm-dd)to_date(2007-04-26 08:08:08,YYYY-MM-DD HH24:MI:SS)to_char

11、(to_date(2007-04-29,yyyy-mm-dd),yyyy-mm-dd) DB2char(1)int(1)double(1.1)char(1.1)date(2007-04-26)to_date(2007-04-26 08:08:08,YYYY-MM-DD HH24:MI:SS)char(date(2007-04-29)兼容写法cast(1 as char)cast(1 as int)无无无兼容无2、Where条件弱类型判断oracle: where 字符型字段 in (整形) 是允许,DB2不允许select abc from dual where 1 in (1) 在oracl

12、e下可通过select abc from sysibm.sysdummy1 where 1 in (1) 在DB2下报错 oracle:where 字符型字段=数字型字段 允许,DB2不允许select abc from dual where 1=1 在oracle下可通过select abc from sysibm.sysdummy1 whre 1=1 在DB2下报错3、replace关键字oracle支持,DB2不支持 create or replace语句在DB2下是非法的4、子查询别名ORACLE 支持select * from(select 1 from dual) 或者 selec

13、t * from(select 1 from dual) tDB2 支持select * from(select 1 from sysibm.sysdummy1) t 或者 select * from(select 1 from sysibm.sysdummy1) as t固兼容的写法是select * from(子查询) t5、DATE数据类型的区别ORACLE中DATE型也是带有时分秒的,但DB2下DATE只是年月日,如2007-04-28,且可作为字符串直接操作,DB2中要记录时分秒必须采用TIMESTAMP型一个采用hibernate后常见的兼容问题是:如果在映射文件中定义了某个字段为

14、Date型 则在DB2下,此字段必须定义为timestamp,而不能定义成DATE,不然会报出字符串右截断的错误对于DB2来说,在查询条件中可以直接用字符串指定日期或时间戳类型字段的值,例如 where create_date = 2007-04-26 、where create_timestamp = 2007-04-26 08:08:08 ,无须使用字符串转日期函数6、分页的处理如果采用JDBC分页的话,注意rownum在DB2中不受支持,比如从masa_area表中取得area_id最小的10条记录,语句分别如下,注意这里的别名t书写方法ORACLE: select t.* from (

15、select rownum as r1 ,masa_area.* from masa_area order by area_id) t where t.r1=10DB2: select t.* from (select rownumber() over() as r1 ,masa_area.* from masa_area order by area_id) t where t.r1=107、decode函数decode函数在DB2不被支持,兼容的写法是采用case when8、NVL函数nvl写法在DB2不被支持,兼容的写法是采用coalesceORACLE: select NVL(f_ar

16、eaid,空) from masa_user 等同于 select coalesce(f_areaid,空,f_areaid) from masa_userDB2: select coalesce(f_areaid,空,f_areaid) from masa_user9、substr的不同DB2 substr举例如下:masa_group表的f_groupCode字段定义成VARCHAR(100),所以下面这个语句不会出错,如果是substr(f_groupCode,1,101)就出错了select * from masa_group where substr(f_groupCode,1,50

17、) = 001006 order by f_groupcode在DB2下无错,但是select * from masa_group where substr(001006, 1, 50) = 001006 order by f_groupcode就报错,说第三个参数超限这是因为001006已经定义为一个长度为6的charater了这点和ORACLE有很大不同,请大家注意如果是要从第一位取到最后一位,稳妥的办法是不要加第三个参数ORACLE:select substr(123456,1) from dualDB2:select substr(123456,1) from sysibm.sysdu

18、mmy1都没有问题10、获取操作系统当前日期ORACLE SysdateDB2 CURRENT DATE11、增加列:相同alter table test add mail varchar(128);12、删除列:oracle 与mysql相同:alter table test drop column mail;db2 :不提供删除列功能(解决办法是删除表,重建)13、更改列名oracle : alter table test rename column mail to mail2;mysql : alter talbe test change mail mail2 varchar(128);

19、db2 : 不提供更改列名功能(解决办法同删除,或者通过建立一个新视图解决)14、更改列类型oracle :alter table test modify column (mail2 integer);mysql :alter table test modify column mail2 integer;db2 :alter table test alter mail varchar(256) 只可以加宽,不能更改类型15、更改列的限制(主键、非空)db2 :alter table test alter mail null/not null;mysql :alter table test mo

20、dify mail2 varchar(29) not null;oracle:alter table test modify mail2 null/not null;三、常用命令 1、建立表 create table zjt_tables as (select * from tables) definition only; create table zjt_views as (select * from views) definition only; 2、插入记录 insert into zjt_tables select * from tables; insert into zjt_view

21、s select * from views; 3、建立视图 create view V_zjt_tables as select tabschema,tabname from zjt_tables; 4、建立触发器 CREATE TRIGGER zjt_tables_del AFTER DELETE ON zjt_tables REFERENCING OLD AS O FOR EACH ROW MODE DB2SQL Insert into zjt_tables1 values(substr(o.tabschema,1,8),substr(o.tabname,1,10) 5、 建立唯一性索引

22、CREATE UNIQUE INDEX I_ztables_tabname ON zjt_tables(tabname); 6、查看表 select tabname from tables where tabname=ZJT_TABLES; 7、 查看列 select SUBSTR(COLNAME,1,20) as 列名,TYPENAME as 类型,LENGTH as 长度 from columns where tabname=ZJT_TABLES; 8、查看表结构 db2 describe table user1.department db2 describe select * from

23、user.tables 9、查看表的索引 db2 describe indexes for table user1.department 10、 查看视图 select viewname from views where viewname=V_ZJT_TABLES; 11、查看索引 select indname from indexes where indname=I_ZTABLES_TABNAME; 12、 查看存贮过程 SELECT SUBSTR(PROCSCHEMA,1,15),SUBSTR(PROCNAME,1,15) FROM SYSCAT.PROCEDURES; 13、类型转换(c

24、ast) ip datatype:varchar select cast(ip as integer)+50 from log_comm_failed四、数据类型DB2内置数据类型可以分成数值型(numeric)、字符串型(character string)、图形字符串(graphic string)、二进制字符串型(binary string)或日期时间型(datetime)。还有一种叫做 DATALINK 的特殊数据类型。DATALINK 值包含了对存储在数据库以外的文件的逻辑引用。1、数值型数据类型 包括 SMALLINT、INTEGER、BIGINT、DECIMAL(p,s)、REAL

25、 和 DOUBLE。所有数值都有符号和精度。精度是指除符号以外的二进制或十进制的位数。如果数字的值大于等于零,就认为符号为正。*小整型,SMALLINT:小整型是两个字节的整数,精度为 5 位。小整型的范围从 -32,768 到 32,767。*大整型,INTEGER 或 INT:大整型是四个字节的整数,精度为 10 位。大整型的范围从 -2,147,483,648 到 2,147,483,647。*巨整型,BIGINT:巨整型是八个字节的整数,精度为 19 位。巨整型的范围从 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。*小数

26、型,DECIMAL(p,s)、DEC(p,s)、NUMERIC(p,s) 或 NUM(p,s):小数型的值是一种压缩十进制数,它有一个隐含的小数点。压缩十进制数将以二-十进制编码(binary-coded decimal,BCD)记数法的变体来存储。小数点的位置取决于数字的精度(p)和小数位(s)。小数位是指数字的小数部分的位数,它不可以是负数,也不能大于精度。最大精度是 31 位。小数型的范围从 -10*31+1 到 10*31-1。*单精度浮点数(Single-precision floating-point),REAL:单精度浮点数是实数的 32 位近似值。数字可以为零,或者在从 -3.

27、402E+38 到 -1.175E-37 或从 1.175E-37 到 3.402E+38 的范围内。*双精度浮点数(Double-precision floating-point),DOUBLE,DOUBLE PRECISION 或 FLOAT:双精度浮点数是实数的 64 位近似值。数字可以为零,或者在从 -1.79769E+308 到 -2.225E-307 或从 2.225E-307 到 1.79769E+308 的范围内。2、字符串 是字节序列。字符串包括 CHAR(n) 类型的定长字符串和 VARCHAR(n)、LONG VARCHAR 或 CLOB(n) 类型的变长字符串。字符串的

28、长度就是序列中的字节数。*定长字符串,CHARACTER(n) 或 CHAR(n):定长字符串的长度介于 1 到 254 字节之间。如果没有指定长度,那么就认为是 1 个字节。*变长字符串,VARCHAR(n)、CHARACTER VARYING(n) 或 CHAR VARYING(n):VARCHAR(n) 类型的字符串是变长字符串,最长可达 32,672 字节。*LONG VARCHAR:LONG VARCHAR 类型的字符串是变长字符串,最长可达 32,700 字节。*字符大对象字符串(Character Large Object String),CLOB(nK|M|G):CLOB 是变

29、长字符串,最长可以达到 2,147,483,647 字节。如果只指定了 n,那么 n 的值就是最大长度。如果指定了 nK,那么最大长度就是 n*1,024(n 的最大值为 2,097,152)。如果指定了 nM,那么最大长度就是 n*1,048,576(n 的最大值为 2,048)。如果指定了 nG,那么最大长度就是 n*1,073,741,824(n 的最大值是 2)。CLOB 用于存储基于大单字节字符集(single-byte character set,SBCS)字符的数据或基于混合(多字节字符集(MBCS)和 SBCS)字符的数据。图形字符串是表示双字节字符数据的字节序列。图形字符串包

30、括类型为 GRAPHIC(n) 的定长图形字符串和类型为 VARGRAPHIC(n)、LONG VARGRAPHIC 和 DBCLOB(n) 的变长图形字符串。字符串的长度就是序列中双字节字符的数目。*定长图形字符串,GRAPHIC(n):定长图形字符串的长度介于 1 到 127 个双字节字符之间。如果没有指定长度,就认为是 1 个双字节字符。*变长图形字符串,VARGRAPHIC(n):VARGRAPHIC(n) 类型的字符串是变长图形字符串,最大长度可达 16,336 个双字节字符。*LONG VARGRAPHIC:LONG VARGRAPHIC 类型的字符串是变长图形字符串,最大长度可达

31、 16,350 个双字节字符。*双字节字符大对象字符串,DBCLOB(nK|M|G):双字节字符大对象是变长双字节字符图形字符串,最长可达 1,073,741,823 个字符。如果只指定了 n,那么 n 就是最大长度。如果指定了 nK,那么最大长度就是 n*1,024(n 的最大值为 1,048,576)。如果指定了 nM,那么最大长度就是 n*1,048,576(n 的最大值为 1,024)。如果指定了 nG,那么最大长度就是 n*1,073,741,824(n 的最大值是 1)。DBCLOB 用于存储基于大 DBCS(双字节字符集,double-byte character set)字符的

32、数据。二进制字符串是字节序列。二进制字符串包括 BLOB(n) 类型的变长字符串,它用于容纳非传统型的数据,诸如图片、语音或混合媒体等,还可以容纳用户定义的类型及用户定义的函数的结构化数据。* 二进制大对象,BLOB(nK|M|G):二进制大对象是变长字符串,最长可达 2,147,483,647 字节。如果只指定了 n,那么 n 就是最大长度。如果指定了 nK,那么最大长度就是 n*1,024(n 的最大值为 2,097,152)。如果指定了 nM,那么最大长度就是 n*1,048,576(n 的最大值为 2,048)。如果指定了 nG,那么最大长度就是 n*1,073,741,824(n 的

33、最大值是 2)。3、日期时间型数据类型包括 DATE、TIME 和 TIMESTAMP。日期时间值可在某些算术和字符串操作中使用,而且兼容某些字符串,但它们既不是字符串,也不是数字。*DATE:DATE 是一个由三部分组成的值(年、月和日)。年份部分的范围是从 0001 到 9999。月份部分的范围是从 1 到 12。日部分的范围是从 1 到 n,其中 n 的值取决于月份。DATE 列长 10 个字节。*TIME:TIME 是一个由三部分组成的值(小时、分钟和秒)。小时部分的范围是从 0 到 24。分钟和秒部分的范围都是从 0 到 59。如果小时为 24,分钟和秒的值都是 0。TIME 列长

34、8 个字节。*TIMESTAMP:TIMESTAMP 是一个由七部分组成的值(年、月、日、小时、分钟、秒和微秒)。年份部分的范围是从 0001 到 9999。月份部分的范围是从 1 到 12。日部分的范围是从 1 到 n,其中 n 的值取决于月份。小时部分的范围是从 0 到 24。分钟和秒部分的范围都是从 0 到 59。微秒部分的范围是从 000000 到 999999。如果小时是 24,那么分钟值、秒的值和微秒的值都是 0。TIMESTAMP 列长 26 个字节。日期时间值的字符串表示:尽管 DATE、TIME 和 TIMESTAMP 的值的内部表示对用户是透明的,日期、时间和时间戳记也可以用字符串来表示,CHAR 标量函数(请参阅 SQL 的“词类(parts of speech)”)可以用于创建日期时间值的字符串表示。*日期值的字符串表示是一个以数字开始,长度不少于 8 个字符的字符串。日期值的月份和日部分中前面的零可以省略。*时间值的字符串表示是以数字开头,长度不少于 4 个字符的字符串。时间值的小时部分前面的零可以省略,秒部分可以完全省略。如果秒的值没有指定,那么就认为是 0。*时间戳记值的字符串表示是以数字开头,长度不少于 16 个字符的字符串。完整的时间戳记字符串表示形式为 yyyy-mm-dd-hh.mm.ss.nnnnnn。时间戳记

温馨提示

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

评论

0/150

提交评论