DB2各种日期函数
db2时间函数

db2时间函数1. 介绍时间函数是数据库管理系统中的一种特殊函数,用于处理和操作日期和时间数据。
在DB2数据库中,有许多内置的时间函数可用于执行各种日期和时间操作。
这些函数提供了方便和灵活的方法来处理日期和时间,并支持各种常见的日期和时间计算。
2. 常用的时间函数以下是一些常用的时间函数,可以在DB2数据库中使用:2.1 CURRENT_DATECURRENT_DATE函数返回当前日期。
它返回一个日期值,表示当前系统日期。
2.2 CURRENT_TIMECURRENT_TIME函数返回当前时间。
它返回一个时间值,表示当前系统时间。
2.3 CURRENT_TIMESTAMPCURRENT_TIMESTAMP函数返回当前日期和时间。
它返回一个时间戳值,表示当前系统日期和时间。
2.4 DATEDATE函数用于从日期时间戳值中提取日期部分。
它接受一个时间戳值作为参数,并返回一个日期值。
2.5 TIMETIME函数用于从日期时间戳值中提取时间部分。
它接受一个时间戳值作为参数,并返回一个时间值。
2.6 TIMESTAMPTIMESTAMP函数用于将日期和时间组合成一个时间戳值。
它接受日期和时间值作为参数,并返回一个时间戳值。
2.7 YEARYEAR函数用于从日期或时间戳值中提取年份部分。
它接受一个日期或时间戳值作为参数,并返回一个整数值,表示年份。
2.8 MONTHMONTH函数用于从日期或时间戳值中提取月份部分。
它接受一个日期或时间戳值作为参数,并返回一个整数值,表示月份。
2.9 DAYDAY函数用于从日期或时间戳值中提取天数部分。
它接受一个日期或时间戳值作为参数,并返回一个整数值,表示天数。
2.10 HOURHOUR函数用于从时间或时间戳值中提取小时部分。
它接受一个时间或时间戳值作为参数,并返回一个整数值,表示小时。
2.11 MINUTEMINUTE函数用于从时间或时间戳值中提取分钟部分。
它接受一个时间或时间戳值作为参数,并返回一个整数值,表示分钟。
DB2 SQL日期函数

DB2SQL日期函数DAYOFWEEK函数:获取星期号语法:DAYOFWEEK(D)参数:日期型D返回值:整型备注:1=星期天2=星期一3=星期二4=星期三5=星期四6=星期五7=星期六可以用以下方式纠正:DAYNAME函数:获取星期名语法:DAYNAME(D)参数:日期型D返回值:日期的星期名,如MONDAY等DAY函数:获取日期号语法:DAY(D)参数:日期型D返回值:整型,指定的日期号CURRENT TIME函数:获取当前时间语法:CURRENT TIME参数:当前时间返回值:日期型SYSIBM.SYSDUMMY1是一个特殊的内存中的表,用它可以发现DB2寄存器的值。
CURRENT TIMESTAMP函数:获取当前日期时间语法:CURRENT TIMESTAMP参数:当前日期时间返回值:当前日期时间CURRENT DATE函数:获取当前日期语法:CURRENT DATE参数:当前日期返回值:当前日期ADD_MONTHS函数:月加法语法:ADD_MONTHS(d,n)参数:日期型d,数值型n返回值:d再过n个月后的日期补充:n可以为负值。
DAYOFYEAR函数:获取一年中的日期号语法:DAYOFYEAR(D)参数:日期型D返回值:整型(该日期是一年中的第几天)范围1~366HOUR函数:获取小时数语法:HOUR(T)参数:时间型T返回值:整型0~23MINUTE函数:获取时间的分钟值语法:MINUTE(T)参数:时间型T返回值:整型0~59MONTH函数:获取日期的月份值语法:MONTH(D)参数:日期型D返回值:整型1~12MONTHNAME函数:获取日期的月份名称语法:MONTHNAME(D)参数:日期型D返回值:月份名称,如January等QUARTER函数:获取日期所在的季度语法:QUARTER(D)参数:日期型D返回值:整型1~4SECOND函数:获取时间的秒值语法:SECOND(T)参数:时间型T返回值:整型0~59WEEK函数:获取日期在一年中的周数语法:WEEK(D)参数:日期型D返回值:整型1~54YEAR函数:获取日期的年份值语法:YEAR(D)参数:日期型D返回值:整型AUTHOR:Lex KwokFROM:OUC。
db2日期时间格式

db2⽇期时间格式1、db2可以通过SYSIBM.SYSDUMMY1、SYSIBM.DUAL获取寄存器中的值,也可以通过VALUES关键字获取寄存器中的值。
SELECT 'HELLO DB2' FROM SYSIBM.SYSDUMMY1;--HELLO DB2SELECT 'HELLO DB2' FROM SYSIBM.DUAL;--HELLO DB2VALUES 'HELLO DB2';--HELLO DB22、CURRENT DATE获取当前⽇期;CURRENT TIME获取当前时间;CURRENT TIMESTAMP获取当前时间戳(含年、⽉、⽇、时、分、秒)。
VALUES CURRENT DATE--2012/5/25 0:00:00;VALUES CURRENT TIME--20:48:53;VALUES CURRENT TIMESTAMP--2012/5/25 20:49:12;3、YEAR()获取年;MONTH()获取⽉;DAY()获取⽇;HOUR()获取⼩时;MINUTE()获取分钟;SECOND()获取秒;DATE()获取⽇期;TIME()获取时间;TIMESTAMP()获取时间戳。
以上函数参数可以是⽇期时间类型,也可以为⽇期时间格式的字符串。
VALUES YEAR(CURRENT TIMESTAMP);/*2012*/ VALUES YEAR('2012-05-25 21:18:12');/*2012*/VALUES MONTH(CURRENT TIMESTAMP);/*5*/ VALUES MONTH('2012-05-25 21:18:12');/*5*/VALUES DAY(CURRENT TIMESTAMP);/*25*/ VALUES DAY('2012-05-25 21:18:12');/*25*/VALUES HOUR(CURRENT TIMESTAMP);/*21*/ VALUES HOUR('2012-05-25 21:18:12');/*21*/VALUES MINUTE(CURRENT TIMESTAMP);/*18*/ VALUES MINUTE('2012-05-25 21:18:12');/*18*/VALUES SECOND(CURRENT TIMESTAMP);/*12*/ VALUES SECOND('2012-05-25 21:18:12');/*12*/VALUES DATE(CURRENT TIMESTAMP);/*2012/5/25 0:00:00*/ VALUES DATE('2012-05-25 21:18:12');/*2012/5/25 0:00:00*/VALUES TIME(CURRENT TIMESTAMP);/*21:18:12*/ VALUES TIME('2012-05-25 21:18:12');/*21:18:12*/VALUES TIMESTAMP(CURRENT TIMESTAMP);/*2012/5/25 21:18:12*/ VALUES TIMESTAMP('2012-05-25 21:18:12');/*2012/5/25 21:18:12*/4、db2时间可以直接加减带单位的时间长度。
db2获取年月的方法 -回复

db2获取年月的方法-回复DB2是IBM公司开发的一种关系型数据库管理系统(RDBMS),在企业信息系统中被广泛应用。
在DB2中,我们可以使用多种方法来获取年月信息。
本文将针对这一问题进行详细介绍,并提供一步一步的方法。
一、使用当前日期函数获取年月信息:DB2提供了一个当前日期函数CURRENT_DATE,它可以返回系统当前的日期。
我们可以使用CURRENT_DATE函数来获取当前的年月信息。
1. 创建一个数据库连接:首先,我们需要在DB2中创建一个合适的数据库连接,以便能够连接到数据库并执行相应的SQL语句。
2. 编写SQL语句:接下来,我们需要编写一个SQL查询语句来获取当前的年月信息。
假设我们有一个名为"orders"的表,其中包含一个名为"order_date"的列,该列记录了订单的日期。
我们可以使用如下的SQL语句来获取当前的年月信息:SELECT YEAR(order_date) AS year, MONTH(order_date) AS month FROM orders在这个语句中,YEAR和MONTH函数分别用于提取日期中的年份和月份。
3. 执行SQL语句并获取结果:接下来,我们可以执行上述SQL语句,并获取结果。
在DB2中,可以使用命令行工具、控制台应用程序或其他DB2客户端工具来执行SQL语句。
执行SQL语句后,我们将会得到一个结果集,其中包含了当前的年月信息。
我们可以将结果集返回给应用程序,或者直接在DB2客户端工具中进行查看。
二、使用日期操作函数获取年月信息:除了使用CURRENT_DATE函数之外,我们还可以使用其他的日期操作函数来获取年月信息。
DB2提供了一些强大的日期操作函数,可以简化我们的操作并提供更丰富的功能。
1. 创建一个数据库连接:同样,我们需要在DB2中创建一个合适的数据库连接,以便能够连接到数据库并执行相应的SQL语句。
DB2函数大全(整理)

DB2函数大全函数名函数解释函数举例AVG()返回一组数值的平均值.SELECT AVG(SALARY)FROMBS EMPMS; CORR(),CORREL ATION()返回一对数值的关系系数.SELECT CORRE LATIO N(SALARY,BONUS)FROMBS EMPMS;COUNT()返回一组行或值的个数.SELECT COUNT(*)FROMBS EMPMS; COVAR(),COVARI ANCE()返回一对数值的协方差.SELECT COVAR(SALARY,BONUS)FROMBS EMPMS;MAX()返回一组数值中的最大值.SELECT MAX(SALARY)FROMBS EMPMS;MIN()返回一组数值中的最小值.SELECT MIN(SALARY)FROMBS EMPMS; STDDEV()返回一组数值的标准偏差.SELECT STDDE V(SALARY)FROMBS EMPMS;SUM()返回一组数据的和.SELECT SUM(SALARY)FROMBS EMPMS;VAR(),VARIAN CE()返回一组数值的方差.SELECT VARIA NCE(SALARY)FROMBS EMPMS;ABS(),ABSVAL()返回参数的绝对值.SELECT ABS(-3.4)FROMBS EMPMS; ACOS()返回参数的反余弦值.SELECT ACOS(0.9)FROMBS EMPMS;ASCII()返回整数参数最左边的字符的ASC II码.SELECT ASCII('R')FROMBS EMPMS;ASIN()返回用弧度表示的角度的参数的反正弦函数.SELECT ASIN(0.9)FROMBS EMPMS;ATAN()返回参数的反正切值,该参数用弧度表示的角度的参数.SELECT ATAN(0.9)FROMBS EMPMS;ATAN2()返回用弧度表示的角度的X和Y坐标的反正切值.SELECT ATAN2(0.5,0.9)FROMBS EMPMS;BIGINT()返回整型常量中的数字或字符串的64位整数表示.SELECT BIGIN T(EMP_NO)FROMBS EMPMS;CEILIN G() OR CEIL()返回比参数大或等于参数的最小的整数值.SELECT CEILI NG(3.56)FROMBS EMPMS;SELECT CEIL(4.67)FROMBS EMPMS; CHAR()返回日期时间型,字符串,整数,十进制或双精度浮点数的字符串表示. SELECT CHAR(SALARY,',')FROMBS EMPMS;CHR()返回具有由参数指定的A SCII码的字符.SELECT CHAR(167)FROMBS EMPMS;CONCAT()返回两个字符串的连接.SELECT CONCA T(EMP_NO,EMP_NA M)FROMBS EMPMS;YEAR()返回数值的年部分.SELECT YEAR('2003/01/02')FROMBS EMPMS; VARCHA R()返回字符串,日期型,图形串的可变长度的字符串表示.SELECT VARCH AR(EMP_NA M,50)FROMBS EMPMS;UCASE() OR UPPER()返回字符串的大写.SELECTUCASE(EMP_NA M)FROMBS EMPMS;SELECT UPPER(EMP_NO)FROMBS EMPMS;TRUNCA TE() OR TRUNC()从表达式小数点右边的位置开始截断并返回该数值. SELECT TRUNC ATE(345.6789,2)FROMBS EMPMS;TIME()返回一个数值中的时间.SELECT TIME('2001-03-19.12.30.123456')FROMBS EMPMS;SUBSTR(EXP1,EXP2)返回EXP1串自EXP2处开始的子串.SELECT SUBSTR('CDNJFD JFJD',5)FROM BSEMPM S;SELECTSUBSTR('CDNJFD JFJD',5,2)FROM BSEMPM S;SQRT()返回该参数的平方根.SELECT SQRT(36)FROMBS EMPMS;SPACE()返回由参数指定的长度,包含空格在内的字符串.SELECT SPACE(10)FROMBS EMPMS;SECOND()返回一个数值的秒部分.SELECT SECON D('18:34:32')FROMBS EMPMS;RTRIM()删除字符串尾部的空格.SELECT RTRIM('COMMEN T')FROMBS EMPMS;ROUND(EXP1,EXP2)返回EXP1小数点右边的第EXP2位置处开始的四舍五入值. SELECT ROUND(2345.6789,2)FROMBS EMPMSREPLAC E(EXP1,EXP2,EXP3)用EXP3替代EXP1中所有的E XP2SELECT CHAR(REPLAC E('ROMAND D','NDD','CCB'),10)FROMBS EMPMS; REPEAT(EXP1,EXP2)返回EXP1重复EXP2次后的字符串.SELECT CHAR(REPEAT('REPEAT',3),21)FROMBS EMPMS;REAL()返回一个数值的单精度浮点数表示.SELECT REAL(10)FROMBS EMPMS;RAND()返回0和1之间的随机浮点数.SELECT RAND()FROMBS EMPMS; POWER(EXP1,EXP2)返回EXP1的EXP2次幂.SELECT POWER(2,5)FROMBS EMPMS;POSSTR(EXP1,EXP2)返回EXP2在EXP1中的位置.SELECT('ABCDEF GH','D')FROMBS EMPMS;NULLIF(EXP1,EXP2)如果EXP1=EXP2,则为NULL,否则为EXP1NODENU MBER()返回行的分区号.SELECT NODEN UMBER(EMP_NO)FROMBS EMPMS;MONTH()返回一个数值的月部分.SELECT MONTH('2003/10/20')FROMBS EMPMS;MOD(EXP1,EXP2)返回EXP1除以EXP2的余数.SELECT MOD(20,8)FROMBS EMPMS;MINUTE()返回一个数值的分钟部分.SELECT MINUT E('18:34:23')FROMBS EMPMS;LTRIM()删除字符串前面的空格.SELECT LTRIM('CDDD')FROMBS EMPMS;HOUR()返回一个数值的小时部分.SELECT HOUR('18:34:23')FROMBS EMPMS;DOUBLE()如果参数是一个数字表达式,返回与其相对应的浮点数,如果参数是字符串表达式,则返回该数的字符串表达式.SELECT DOUBL E('5678')FROMBS EMPMS;EXP()返回参数的指数函数.SELECT EXP(2)FROMBS EMPMS;FLOAT()返回一个数的浮点表示.SELECT FLOAT(789)FROMBS EMPMS; FLOOR()返回小于或等于参数的最大整数.SLECTF LOOR(88.93)FROMBS EMPMS;HEX()返回一个表示为字符串的值的16进制表示.SELECT HEX(16)FROMBS EMPMS;因为没有更好的术语,所以您还可以使用英语来执行日期和时间计算:curren t date + 1 YEARcurren t date + 3 YEARS+ 2 MONTHS + 15 DAYScurren t time + 5 HOURS- 3 MINUTE S + 10 SECOND S要计算两个日期之间的天数,您可以对日期作减法,如下所示:days (curren t date) - days (date('1999-10-22'))而以下示例描述了如何获得微秒部分归零的当前时间戳记:CURREN T TIMEST AMP - MICROS ECOND (curren t timest amp) MICROS ECOND S如果想将日期或时间值与其它文本相衔接,那么需要先将该值转换成字符串。
DB2各种日期函数

基础要使用SQL 获得当前的日期、时间及时间戳记,请参考适当的DB2 寄存器:SELECT current date FROM sysibm.sysdummy1SELECT current time FROM sysibm.sysdummy1SELECT current timestamp FROM sysibm.sysdummy1sysibm.sysdummy1表是一个特殊的内存中的表,用它可以发现如上面演示的DB2 寄存器的值。
您也可以使用关键字VALUES 来对寄存器或表达式求值。
例如,在DB2 命令行处理器(Command Line Processor,CLP)上,以下SQL 语句揭示了类似信息:VALUES current dateVALUES current timeVALUES current timestamp在余下的示例中,我将只提供函数或表达式,而不再重复SELECT ... FROM sysibm.sysdummy1 或使用VALUES 子句。
要使当前时间或当前时间戳记调整到GMT/CUT,则把当前的时间或时间戳记减去当前时区寄存器:current time - current timezonecurrent timestamp - current timezone给定了日期、时间或时间戳记,则使用适当的函数可以单独抽取出(如果适用的话)年、月、日、时、分、秒及微秒各部分:YEAR (current timestamp)MONTH (current timestamp)DAY (current timestamp)HOUR (current timestamp)MINUTE (current timestamp)SECOND (current timestamp)MICROSECOND (current timestamp)从时间戳记单独抽取出日期和时间也非常简单:DATE (current timestamp)TIME (current timestamp)因为没有更好的术语,所以您还可以使用英语来执行日期和时间计算:current date + 1 YEARcurrent date + 3 YEARS + 2 MONTHS + 15 DAYScurrent time + 5 HOURS - 3 MINUTES + 10 SECONDS要计算两个日期之间的天数,您可以对日期作减法,如下所示:days (current date) - days (date('1999-10-22'))而以下示例描述了如何获得微秒部分归零的当前时间戳记:CURRENT TIMESTAMP - MICROSECOND (current timestamp) MICROSECONDS如果想将日期或时间值与其它文本相衔接,那么需要先将该值转换成字符串。
db2时间函数

db2时间函数DB2是一种关系型数据库管理系统,它提供了许多时间函数来处理日期和时间数据。
这些时间函数可以帮助用户在DB2中进行时间计算和处理,从而更好地管理和分析数据。
下面是一些常用的DB2时间函数:1. CURRENT_DATE:返回当前日期,格式为YYYY-MM-DD。
2. CURRENT_TIME:返回当前时间,格式为HH:MM:SS。
3. CURRENT_TIMESTAMP:返回当前日期和时间,格式为YYYY-MM-DD HH:MM:SS。
4. DATE:将日期字符串转换为日期类型。
5. DAY:返回日期中的天数。
6. MONTH:返回日期中的月份。
7. YEAR:返回日期中的年份。
8. HOUR:返回时间中的小时数。
9. MINUTE:返回时间中的分钟数。
10. SECOND:返回时间中的秒数。
11. TIMESTAMP:将日期和时间字符串转换为时间戳类型。
12. WEEK:返回日期所在的周数。
13. WEEKDAY:返回日期所在的星期几。
14. DAYS:计算两个日期之间的天数差。
15. MONTHS:计算两个日期之间的月数差。
16. YEARS:计算两个日期之间的年数差。
这些时间函数可以在SELECT语句中使用,以便在查询结果中显示日期和时间数据。
例如,以下查询将返回当前日期和时间:SELECT CURRENT_TIMESTAMP FROM SYSIBM.SYSDUMMY1;此外,时间函数还可以在WHERE子句中使用,以便根据日期和时间数据过滤查询结果。
例如,以下查询将返回所有在当前月份之后创建的订单:SELECT * FROM ORDERS WHERE MONTH(CREATE_DATE) > MONTH(CURRENT_DATE);总之,DB2时间函数是处理日期和时间数据的有用工具。
它们可以帮助用户更好地管理和分析数据,从而提高数据库的效率和可靠性。
DB2 V95常用函数详解(带实例)

DB2常用函数实例版使用说明:函数定义形式result : schema-name.funcation_name(para-list)其中参数列表形式,<>表示必选参数,[]表示可选参数,|表示任选其一下面的所有实例均在DB2 V95版本测试通过,如果是新版本会加注。
any-builtin-type:Any data type that is not a distinct type structured-type:Any user-defined structured type defined to the databasecharacter-type:Any of the character string types: CHAR, VARCHAR, LONG VARCHAR, CLOB.datetime-type:Any of the datetime types: DATE, TIME, TIMESTAMPgraphic-type:Any of the double byte character string types: GRAPHIC, VARGRAPHIC, LONGVARGRAPHIC, DBCLOB.string-type:Any type from character type, graphic-type or BLOB numeric-type:Any of the numeric types: SMALLINT, INTEGER, BIGINT, DECIMAL, REAL, DOUBLE.函数定义的Schema有sysfun和sysibm1 字符串函数ascii 返回字符串首字符的ASCII码值integer : sysfun.ascii(<char>|<varchar(4000)>|<clob(1M)>) values sysfun.ascii('A'),sysfun.ascii('ABC'),sysfun.ascii('中国人'); 结果:65 65 206hex 返回字符的十六进制值varchar : hex(<any-type>)values hex('中'),hex('A'),x'41',x'E590B4'; 结果:E590B4 41 A 中chr 返回ASCII值对应的字符char : sysfun.chr(<integer>)values sysfun.chr(89); 结果:Yconcat 字符串连接string-type : sysibm.concat(<string-type>,<string-type>) values sysibm.concat('hello','world');结果:helloworldlower,lcase 转小写,upper,ucase 转大写varchar(4000)|clob(1M) : sysfun.lcase(<varchar(4000>|<clob(1M)>)char|varchar : sysibm.lower(<char>|<varchar>)values sysibm.lower('Your Name'),sysibm.upper('Your Name'); 结果:your name YOUR NAMEvalues sysibm.lcase('Your Name'),sysfun.ucase('Your Name'); 结果:your name YOUR NAMEltrim 去左空格,rtrim 去右空格,trim 去左右空格char|varchar|graphic sysibm.ltrim(<char>|<varchar>|<graphic>)varchar(4000)|clob(1M) sysfun.ltrim(<varchar(4000)>|<clob(1M)>)rtrim定义同ltrim,只不过trim函数定义不清楚values '['||sysibm.ltrim(' h w ')||']','['||sysfun.rtrim(' h w ')||']','['||trim(' h w ')||']'; 结果:[h w ] [ h w] [h w]trim 去除表达式前后指定的字符,默认是空格character-type : sysibm.trim([B|BOTH|L|LEADING|T|TRAILING] <strip-express> FROM <string-express>) 将表达式前或后(默认是BOTH)指定的字符(strip-express)移除values trim('0' from '00012300') 结果:123strip 去除表达式前后指定的字符,默认是空格character-type : sysibm.strip(<string-express>[,B|BOTH|L|LEADING|T|TRAILING,< strip-express>])values strip('**88000***',b,'*') 结果:88000posstr 查找字符串位置(从1开始计数),没有找到返回0string-type : sysibm.posstr(<string-type:source-string>,<string-type:search-s tring>) 前者为source-string,后为search-stringvalues sysibm.posstr('the one is not that one','one'); 结果:5 position 查找字符串位置,与posstr功能类似,由于考虑到不同国家的字符集,增强编码模式string-type : sysibm.position(<string-type:source-string>,<string-type:search -string>,CODEUNITS16|CODEUNITS32|OCTETS)values position('a','abca',OCTETS) 结果:1locate 搜索子字符串出现的位置,找不到返回0integer : sysfun.locate(<varchar(4000):exp1>,<varchar(4000):exp2>[,inte ger]) 其中varchar(4000)还可以换成clob(1M)或blob(1M)values sysfun.locate('y','yesterday'),sysfun.locate('y','yesterday',2); 结果: 1 9repeat 重复字符串varchar(4000)|clob(1M)|blob(1M) : sysfun.repeat(<varchar(4000)>|<clob(1M)>|<blob(1M)>,<integ er>)values sysfun.repeat('ab',5); 结果:abababababspace 产生空格varchar(4000) : sysfun.space(<integer>)values '['||sysfun.space(5)||']' ; 结果:[ ]replace 替换字符串varchar(4000)|clob(1M)|blob(1M) : sysfun.replace(<varchar(4000):exp1>,<varchar(4000):exp2>,<var char(4000):exp3>) 在exp1中查找所有exp2使用exp3来替换values sysfun.replace('abac','a','d'); 结果:dbdcleft 返回左边字符串right 返回右边字符串varchar(4000)|clob(1M)|blob(1M) : sysfun.left(<varchar(4000)>|<clob(1M)>,<integer>) right函数同样定义values left('adf.adf',5),right('adf.adf',5) ; 结果:adf.a f.adf values right(digits(3),5),left(rtrim(char(3))||'00000',5); 结果: 00003 30000 这也是左补零右补零的方法substr 截取字符中string-type : sysibm.substr(<string-type:string>,<integer:start>[,integer:leng th]) 要求start从1~string的长度,如果指定length的话,要求必须能取到length位字符,不然会报错。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基础要使用SQL 获得当前的日期、时间及时间戳记,请参考适当的DB2 寄存器:SELECT current date FROM sysibm.sysdummy1SELECT current time FROM sysibm.sysdummy1SELECT current timestamp FROM sysibm.sysdummy1sysibm.sysdummy1表是一个特殊的内存中的表,用它可以发现如上面演示的DB2 寄存器的值。
您也可以使用关键字V ALUES 来对寄存器或表达式求值。
例如,在DB2 命令行处理器(Command Line Processor,CLP)上,以下SQL 语句揭示了类似信息:V ALUES current dateV ALUES current timeV ALUES current timestamp在余下的示例中,我将只提供函数或表达式,而不再重复SELECT ... FROM sysibm.sysdummy1 或使用V ALUES 子句。
要使当前时间或当前时间戳记调整到GMT/CUT,则把当前的时间或时间戳记减去当前时区寄存器:current time - current timezonecurrent timestamp - current timezone给定了日期、时间或时间戳记,则使用适当的函数可以单独抽取出(如果适用的话)年、月、日、时、分、秒及微秒各部分:YEAR (current timestamp)MONTH (current timestamp)DAY (current timestamp)HOUR (current timestamp)MINUTE (current timestamp)SECOND (current timestamp)MICROSECOND (current timestamp)从时间戳记单独抽取出日期和时间也非常简单:DA TE (current timestamp)TIME (current timestamp)因为没有更好的术语,所以您还可以使用英语来执行日期和时间计算:current date + 1 YEARcurrent date + 3 YEARS + 2 MONTHS + 15 DAYScurrent time + 5 HOURS - 3 MINUTES + 10 SECONDS要计算两个日期之间的天数,您可以对日期作减法,如下所示:days (current date) - days (date('1999-10-22'))而以下示例描述了如何获得微秒部分归零的当前时间戳记:CURRENT TIMESTAMP - MICROSECOND (current timestamp) MICROSECONDS如果想将日期或时间值与其它文本相衔接,那么需要先将该值转换成字符串。
为此,只要使用CHAR() 函数:char(current date)char(current time)char(current date + 12 hours)要将字符串转换成日期或时间值,可以使用:TIMESTAMP ('2002-10-20-12.00.00.000000')TIMESTAMP ('2002-10-20 12:00:00')DA TE ('2002-10-20')DA TE ('10/20/2002')TIME ('12:00:00')TIME ('12.00.00')TIMESTAMP()、DATE() 和TIME() 函数接受更多种格式。
上面几种格式只是示例,我将把它作为一个练习,让读者自己去发现其它格式。
警告:摘自DB2 UDB V8.1 SQL Cookbook,作者Graeme Birchall(see /homepages/Graeme_Birchall).如果你在日期函数中偶然地遗漏了引号,那将如何呢?结论是函数会工作,但结果会出错:SELECT DATE(2001-09-22) FROM SYSIBM.SYSDUMMY1;结果:======05/24/0006为什么会产生将近2000 年的差距呢?当DA TE 函数得到了一个字符串作为输入参数的时候,它会假定这是一个有效的DB2 日期的表示,并对其进行适当地转换。
相反,当输入参数是数字类型时,函数会假定该参数值减 1 等于距离公元第一天(0001-01-01)的天数。
在上面的例子中,我们的输入是2001-09-22,被理解为(2001-9)-22, 等于1970 天,于是该函数被理解为DA TE(1970)。
日期函数有时,您需要知道两个时间戳记之间的时差。
为此,DB2 提供了一个名为TIMESTAMPDIFF() 的内置函数。
但该函数返回的是近似值,因为它不考虑闰年,而且假设每个月只有30 天。
以下示例描述了如何得到两个日期的近似时差:timestampdiff (<n>, char(timestamp('2002-11-30-00.00.00')-timestamp('2002-11-08-00.00.00')))对于<n>,可以使用以下各值来替代,以指出结果的时间单位:1 = 秒的小数部分2 = 秒4 = 分8 = 时16 = 天32 = 周64 = 月128 = 季度256 = 年当日期很接近时使用timestampdiff() 比日期相差很大时精确。
如果需要进行更精确的计算,可以使用以下方法来确定时差(按秒计):(DAYS(t1) - DAYS(t2)) * 86400 +(MIDNIGHT_SECONDS(t1) - MIDNIGHT_SECONDS(t2))为方便起见,还可以对上面的方法创建SQL 用户定义的函数:CREATE FUNCTION secondsdiff(t1 TIMESTAMP, t2 TIMESTAMP)RETURNS INTRETURN ((DAYS(t1) - DAYS(t2)) * 86400 +(MIDNIGHT_SECONDS(t1) - MIDNIGHT_SECONDS(t2)))@如果需要确定给定年份是否是闰年,以下是一个很有用的SQL 函数,您可以创建它来确定给定年份的天数:CREATE FUNCTION daysinyear(yr INT)RETURNS INTRETURN (CASE (mod(yr, 400)) WHEN 0 THEN 366 ELSECASE (mod(yr, 4)) WHEN 0 THENCASE (mod(yr, 100)) WHEN 0 THEN 365 ELSE 366 ENDELSE 365 ENDEND)@最后,以下是一张用于日期操作的内置函数表。
它旨在帮助您快速确定可能满足您要求的函数,但未提供完整的参考。
有关这些函数的更多信息,请参考SQL 参考大全。
SQL 日期和时间函数DAYNAME 返回一个大小写混合的字符串,对于参数的日部分,用星期表示这一天的名称(例如,Friday)。
DAYOFWEEK 返回参数中的星期几,用范围在1-7 的整数值表示,其中1 代表星期日。
DAYOFWEEK_ISO 返回参数中的星期几,用范围在1-7 的整数值表示,其中1 代表星期一。
DAYOFYEAR 返回参数中一年中的第几天,用范围在1-366 的整数值表示。
DAYS 返回日期的整数表示。
JULIAN_DAY 返回从公元前4712 年1 月1 日(儒略日历的开始日期)到参数中指定日期值之间的天数,用整数值表示。
MIDNIGHT_SECONDS 返回午夜和参数中指定的时间值之间的秒数,用范围在0 到86400 之间的整数值表示。
MONTHNAME 对于参数的月部分的月份,返回一个大小写混合的字符串(例如,January)。
TIMESTAMP_ISO 根据日期、时间或时间戳记参数而返回一个时间戳记值。
TIMESTAMP_FORMAT 从已使用字符模板解释的字符串返回时间戳记。
TIMESTAMPDIFF 根据两个时间戳记之间的时差,返回由第一个参数定义的类型表示的估计时差。
TO_CHAR < td>返回已用字符模板进行格式化的时间戳记的字符表示。
TO_CHAR 是V ARCHAR_FORMAT 的同义词。
TO_DA TE 从已使用字符模板解释过的字符串返回时间戳记。
TO_DATE 是TIMESTAMP_FORMAT 的同义词。
WEEK 返回参数中一年的第几周,用范围在1-54 的整数值表示。
以星期日作为一周的开始。
WEEK_ISO 返回参数中一年的第几周,用范围在1-53 的整数值表示。
改变日期格式在日期的表示方面,这也是我经常碰到的一个问题。
用于日期的缺省格式由数据库的地区代码决定,该代码在数据库创建的时候被指定。
例如,我在创建数据库时使用territory=US 来定义地区代码,则日期的格式就会像下面的样子:values current date1----------05/30/20031 record(s) selected.也就是说,日期的格式是MM/DD/YYYY. 如果想要改变这种格式,你可以通过绑定特定的DB2 工具包来实现. 其他被支持的日期格式包括:DEF 使用与地区代码相匹配的日期和时间格式。
EUR 使用欧洲日期和时间的IBM 标准格式。
ISO 使用国际标准组织(ISO)制订的日期和时间格式。
JIS 使用日本工业标准的日期和时间格式。
LOC 使用与数据库地区代码相匹配的本地日期和时间格式。
USA 使用美国日期和时间的IBM 标准格式。
在Windows 环境下,要将缺省的日期和时间格式转化成ISO 格式(YYYY-MM-DD),执行下列操作:在命令行中,改变当前目录为sqllib\bnd 。
例如:在Windows 环境: c:\program files\IBM\sqllib\bnd在UNIX 环境: /home/db2inst1/sqllib/bnd从操作系统的命令行界面中用具有SYSADM 权限的用户连接到数据库: db2 connect to DBNAMEdb2 bind @db2ubind.lst datetime ISO blocking all grant public(在你的实际环境中,用你的数据库名称和想使用的日期格式分别来替换DBNAME and ISO。
)现在,你可以看到你的数据库已经使用ISO 作为日期格式了:values current date1----------2003-05-301 record(s) selected.定制日期/时间格式在上面的例子中,我们展示了如何将DB2 当前的日期格式转化成系统支持的特定格式。