DB2数据库资料整理Word格式.docx
- 文档编号:18343887
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:13
- 大小:23.65KB
DB2数据库资料整理Word格式.docx
《DB2数据库资料整理Word格式.docx》由会员分享,可在线阅读,更多相关《DB2数据库资料整理Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
dayofyear(arg)
返回arg在年内的天值
Dayofweek(arg)
返回arg在周内的天值
days(arg)
返回日期的整数表示法,从0001-01-01来的天数。
midnight_seconds(arg)
午夜和arg之间的秒数
Monthname(arg)
返回arg的月份名
Dayname(arg)
返回arg的星期
currentdat
系统时间
selectcurrentdatefromsysibm.sysdummy1
currentdate+1
返回当前时间的下一天(年月时同理)
selectcurrentdate+1dayfromsysibm.sysdummy1
currentdate+1YEAR
currentdate+3YEARS+2MONTHS+15DAYS
currenttime+5HOURS-3MINUTES+10SECONDS
使用英语来执行日期和时间计算
days(currentdate)-days(date('
1999-10-22'
))
计算两个日期之间的天数
char(currentdate)
char(currenttime)
char(currentdate+12hours)
将日期或时间值与其它文本相衔接,那么需要先将该值转换成字符串
har(currentdate)
TIMESTAMP('
2002-10-20-12.00.00.000000'
)
2002-10-2012:
00:
00'
DATE('
2002-10-20'
10/20/2002'
TIME('
12:
12.00.00'
)
要将字符串转换成日期或时间值
Coalesce(arg1,arg2….)
返回参数集中第一个非null参数。
insert(arg1,pos,size,arg2)
返回一个,将arg1从pos处删除size个字符,
将arg2插入该位置。
left(arg,length)
返回arg最左边的length个字符串。
locate(arg1,arg2,<
pos>
在arg2中查找arg1第一次出现的位置,指定pos,则从arg2的pos处开始找arg1第一次出现的位置。
posstr(arg1,arg2)
返回arg2第一次在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,<
length>
返回arg1中pos位置开始的length个字符,如果没指定length,则返回剩余的字符。
coalesce
空值处理函数
selectcoalesce(comm,1000)fromstaff;
Oracle:
selectnvl(null,'
aaa'
)fromdual;
ltrim(rtrim('
abc'
默认去掉两端空格
selectltrim(rtrim('
))fromsysibm.sysdummy1
ltrim('
只去掉左端空格
selectltrim('
rtrim('
只去掉右端空格
selectrtrim('
upper('
abc'
)或ucase('
回字符串大写值,
selectupper('
||或concat
合并字符串
selectconcat('
abcd'
'
efg'
select'
||'
fromsysibm.sysdummy1
Ceil(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为负,则对小数点前的数做四舍五入处理。
truncate(arg1,arg2)
截断arg1,arg2是位数,如果arg2是负数,则保留arg1小数点前的arg2位。
来源:
考试大-Oracle认证考试
二、DB2和Oracle的SQL写法的主要区别
1、数据类型转换函数
整型转字符型
字符串转整形
字符串转浮点型
浮点型转字符串
字符串转日期
字符串转时间戳
日期转字符串
ORACLE
to_char
(1)
to_number('
1'
1.1'
to_char(1.1)
to_date('
2007-04-26'
yyyy-mm-dd'
2007-04-2608:
08:
08'
YYYY-MM-DDHH24:
MI:
SS'
to_char(to_date('
2007-04-29'
),'
DB2
char
(1)
int('
double('
char(1.1)
date('
char(date('
兼容写法
cast(1aschar)
cast('
asint)
无
兼容
2、Where条件弱类型判断
oracle:
where字符型字段in(整形)是允许,DB2不允许
fromdualwhere'
in
(1)在oracle下可通过
fromsysibm.sysdummy1where'
in
(1)在DB2下报错
oracle:
where字符型字段=数字型字段允许,DB2不允许
=1在oracle下可通过
fromsysibm.sysdummy1whre'
=1在DB2下报错
3、replace关键字
oracle支持,DB2不支持createorreplace语句在DB2下是非法的
4、子查询别名
ORACLE支持select*from(select1fromdual)或者select*from(select1fromdual)t
DB2支持select*from(select1fromsysibm.sysdummy1)t或者select*from(select1fromsysibm.sysdummy1)ast
固兼容的写法是select*from(子查询)t
5、DATE数据类型的区别
ORACLE中DATE型也是带有时分秒的,但DB2下DATE只是年月日,如'
2007-04-28'
,且可作为字符串直接操作,DB2中要记录时分秒必须采用TIMESTAMP型
一个采用hibernate后常见的兼容问题是:
如果在映射文件中定义了某个字段为Date型
<
propertyname="
createTime"
type="
"
>
<
columnname="
CREATE_TIME"
length="
7"
/>
/property>
则在DB2下,此字段必须定义为timestamp,而不能定义成DATE,不然会报出字符串右截断的错误
对于DB2来说,在查询条件中可以直接用字符串指定日期或时间戳类型字段的值,例如wherecreate_date='
、wherecreate_timestamp='
,无须使用字符串转日期函数
6、分页的处理
如果采用JDBC分页的话,注意rownum在DB2中不受支持,比如从masa_area表中取得area_id最小的10条记录,语句分别如下,注意这里的别名t书写方法
ORACLE:
selectt.*from(selectrownumasr1,masa_area.*frommasa_areaorderbyarea_id)twheret.r1<
=10
DB2:
selectt.*from(selectrownumber()over()asr1,masa_area.*frommasa_areaorderbyarea_id)twheret.r1<
7、decode函数
decode函数在DB2不被支持,兼容的写法是采用casewhen
8、NVL函数
nvl写法在DB2不被支持,兼容的写法是采用coalesce
selectNVL(f_areaid,'
空'
)frommasa_user等同于selectcoalesce(f_areaid,'
f_areaid)frommasa_user
selectcoalesce(f_areaid,'
9、substr的不同
DB2substr举例如下:
masa_group表的f_groupCode字段定义成VARCHAR(100),所以下面这个语句不会出错,如果是substr(f_groupCode,1,101)就出错了
select*frommasa_groupwheresubstr(f_groupCode,1,50)='
001006'
orderbyf_groupcode
在DB2下无错,但是
select*frommasa_groupwheresubstr('
1,50)='
就报错,说第三个参数超限
这是因为'
已经定义为一个长度为6的charater了
这点和ORACLE有很大不同,请大家注意
如果是要从第一位取到最后一位,稳妥的办法是不要加第三个参数
ORACLE:
selectsubstr('
123456'
1)fromdual
DB2:
1)fromsysibm.sysdummy1
都没有问题
10、获取操作系统当前日期
ORACLESysdate
DB2
CURRENTDATE
11、增加列:
相同
altertabletestaddmailvarchar(128);
12、删除列:
oracle与mysql相同:
altertabletestdropcolumnmail;
db2
:
不提供删除列功能(解决办法是删除表,重建)
13、更改列名
oracle:
altertabletestrenamecolumnmailtomail2;
mysql
altertalbetestchangemailmail2varchar(128);
不提供更改列名功能(解决办法同删除,或者通过建立一个新视图解决)
14、更改列类型
altertabletestmodifycolumn(mail2integer);
altertabletestmodifycolumnmail2integer;
altertabletestaltermailvarchar(256)只可以加宽,不能更改类型
15、更改列的限制(主键、非空)
altertabletestaltermailnull/notnull;
mysql:
altertabletestmodifymail2varchar(29)notnull;
altertabletestmodifymail2null/notnull;
三、常用命令
1、建立表
createtablezjt_tablesas
(select*fromtables)definitiononly;
createtablezjt_viewsas
(select*fromviews)definitiononly;
2、插入记录
insertintozjt_tablesselect*fromtables;
insertintozjt_viewsselect*fromviews;
3、建立视图
createviewV_zjt_tablesasselecttabschema,tabnamefromzjt_tables;
4、建立触发器
CREATETRIGGERzjt_tables_del
AFTERDELETEONzjt_tables
REFERENCINGOLDASO
FOREACHROWMODEDB2SQL
Insertintozjt_tables1values(substr(o.tabschema,1,8),substr(o.tabname,1,10))
5、建立唯一性索引
CREATEUNIQUEINDEXI_ztables_tabname
ONzjt_tables(tabname);
6、查看表
selecttabnamefromtables
wheretabname='
ZJT_TABLES'
;
7、查看列
selectSUBSTR(COLNAME,1,20)as列名,TYPENAMEas类型,LENGTHas长度
fromcolumns
8、查看表结构
db2describetableuser1.department
db2describeselect*fromuser.tables
9、查看表的索引
db2describeindexesfortableuser1.department
10、查看视图
selectviewnamefromviews
whereviewname='
V_ZJT_TABLES'
11、查看索引
selectindnamefromindexes
whereindname='
I_ZTABLES_TABNAME'
12、查看存贮过程
SELECTSUBSTR(PROCSCHEMA,1,15),SUBSTR(PROCNAME,1,15)
FROMSYSCAT.PROCEDURES;
13、类型转换(cast)
ipdatatype:
varchar
selectcast(ipasinteger)+50fromlog_comm_failed
四、数据类型
DB2内置数据类型可以分成数值型(numeric)、字符串型(characterstring)、图形字符串(graphicstring)、二进制字符串型(binarystring)或日期时间型(datetime)。
还有一种叫做DATALINK的特殊数据类型。
DATALINK值包含了对存储在数据库以外的文件的逻辑引用。
1、数值型数据类型
包括SMALLINT、INTEGER、BIGINT、DECIMAL(p,s)、REAL和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。
*小数型,DECIMAL(p,s)、DEC(p,s)、NUMERIC(p,s)或NUM(p,s):
小数型的值是一种压缩十进制数,它有一个隐含的小数点。
压缩十进制数将以二-十进制编码(binary-codeddecimal,BCD)记数法的变体来存储。
小数点的位置取决于数字的精度(p)和小数位(s)。
小数位是指数字的小数部分的位数,它不可以是负数,也不能大于精度。
最大精度是31位。
小数型的范围从-10**31+1到10**31-1。
*单精度浮点数(Single-precisionfloating-point),REAL:
单精度浮点数是实数的32位近似值。
数字可以为零,或者在从-3.402E+38到-1.175E-37或从1.175E-37到3.402E+38的范围内。
*双精度浮点数(Double-precisionfloating-point),DOUBLE,DOUBLEPRECISION或FLOAT:
双精度浮点数是实数的64位近似值。
数字可以为零,或者在从-1.79769E+308到-2.225E-307或从2.225E-307到1.79769E+308的范围内。
2、字符串
是字节序列。
字符串包括CHAR(n)类型的定长字符串和VARCHAR(n)、LONGVARCHAR或CLOB(n)类型的变长字符串。
字符串的长度就是序列中的字节数。
*定长字符串,CHARACTER(n)或CHAR(n):
定长字符串的长度介于1到254字节之间。
如果没有指定长度,那么就认为是1个字节。
*变长字符串,VARCHAR(n)、CHARACTERVARYING(n)或CHARVARYING(n):
VARCHAR(n)类型的字符串是变长字符串,最长可达32,672字节。
*LONGVARCHAR:
LONGVARCHAR类型的字符串是变长字符串,最长可达32,700字节。
*字符大对象字符串(CharacterLargeObjectString),CLOB(n[K|M|G]):
CLOB是变长字符串,最长可以达到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-bytecharacterset,SBCS)字符的数据或基于混合(多字节字符集(MBCS)和SBCS)字符的数据。
图形字符串是表示双字节字符数据的字节序列。
图形字符串包括类型为GRAPHIC(n)的定长图形字符串和类型为VARGRAPHIC(n)、LONGVARGRAPHIC和DBCLOB(n)的变长图形字符串。
字符串的长度就是序列中双字节字符的数目。
*定长图形字符串,GRAPHIC(n):
定长图形字符串的长度介于1到127个双字节字符之间。
如果没有指定长度,就认为是1个双字节字符。
*变长图形字符串,VARGRAPHIC(n):
VARGRAPHIC(n)类型的字符串是变长图形字符串,最大长度可达16,336个双字节字符。
*LONGVARGRAPHIC:
LONGVARGRAPHIC类型
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DB2 数据库 资料 整理
![提示](https://static.bdocx.com/images/bang_tan.gif)