DB2数据库时间日期相关SQL函数

来源:互联网 发布:开票软件怎么安装 编辑:程序博客网 时间:2024/05/22 09:07

db2日期和时间函数常用知识汇总

2012-09-10 00:46 来源:博客园 作者:wanghonghu 字号:T|T

[摘要]本文介绍db2日期和时间函数常用知识,包括DAYOFWEEK、DAYOFYEAR、MONTHNAME、TIMESTAMPDIFF、YEAR、MONTH、DAY等函数的介绍。

1、db2可以通过SYSIBM.SYSDUMMY1、SYSIBM.DUAL获取寄存器中的值,也可以通过VALUES关键字获取寄存器中的值。

1
2
3
SELECT'HELLO DB2'FROMSYSIBM.SYSDUMMY1;--HELLO DB2
SELECT'HELLO DB2'FROMSYSIBM.DUAL;--HELLO DB2
VALUES'HELLO DB2';--HELLO DB2

2、CURRENT DATE获取当前日期;CURRENT TIME获取当前时间;CURRENT TIMESTAMP获取当前时间戳(含年、月、日、时、分、秒)。

1
2
3
VALUESCURRENTDATE--2012/5/25 0:00:00;
VALUESCURRENTTIME--20:48:53;
VALUESCURRENTTIMESTAMP--2012/5/25 20:49:12;

3、YEAR()获取年;MONTH()获取月;DAY()获取日;

HOUR()获取小时;MINUTE()获取分钟;SECOND()获取秒;

DATE()获取日期;TIME()获取时间;TIMESTAMP()获取时间戳。

以上函数参数可以是日期时间类型,也可以为日期时间格式的字符串。

1
2
3
4
5
6
7
8
9
VALUESYEAR(CURRENTTIMESTAMP);/*2012*/ VALUESYEAR('2012-05-25 21:18:12');/*2012*/
VALUESMONTH(CURRENTTIMESTAMP);/*5*/ VALUESMONTH('2012-05-25 21:18:12');/*5*/
VALUESDAY(CURRENTTIMESTAMP);/*25*/ VALUESDAY('2012-05-25 21:18:12');/*25*/
VALUESHOUR(CURRENTTIMESTAMP);/*21*/ VALUESHOUR('2012-05-25 21:18:12');/*21*/
VALUESMINUTE(CURRENTTIMESTAMP);/*18*/ VALUESMINUTE('2012-05-25 21:18:12');/*18*/
VALUESSECOND(CURRENTTIMESTAMP);/*12*/  VALUESSECOND('2012-05-25 21:18:12');/*12*/
VALUESDATE(CURRENTTIMESTAMP);/*2012/5/25 0:00:00*/  VALUESDATE('2012-05-25 21:18:12');/*2012/5/25 0:00:00*/
VALUESTIME(CURRENTTIMESTAMP);/*21:18:12*/ VALUESTIME('2012-05-25 21:18:12');/*21:18:12*/
VALUESTIMESTAMP(CURRENTTIMESTAMP);/*2012/5/25 21:18:12*/  VALUESTIMESTAMP('2012-05-25 21:18:12');/*2012/5/25 21:18:12*/

4、db2时间可以直接加减带单位的时间长度。

1
2
3
4
5
6
7
8
VALUESTIMESTAMP('2012-5-25 21:18:12')+1YEAR;--2013/5/25 21:18:12
VALUESTIMESTAMP('2012-5-25 21:18:12')+1MONTH;--2012/6/25 21:18:12
VALUESTIMESTAMP('2012-5-25 21:18:12')+1DAY;--2012/5/26 21:18:12
VALUESTIMESTAMP('2012-5-25 21:18:12')+1HOUR;--2012/5/25 22:18:12
VALUESTIMESTAMP('2012-5-25 21:18:12')+1MINUTE;--2012/5/25 21:19:12
VALUESTIMESTAMP('2012-5-25 21:18:12')+1SECOND;--2012/5/25 21:18:13
VALUESTIMESTAMP('2012-5-25 21:18:12')+1YEAR+1MONTH+1DAY+1HOUR+1MINUTE+1SECOND;--2013/6/26 22:19:13
VALUESTIMESTAMP('2012-5-25 21:18:12')-1YEAR-1MONTH-1DAY-1HOUR-1MINUTE-1SECOND;--2011/4/24 20:17:11

5、通过days()可以获取两个时间相差天数。

1
VALUESDAYS(CURRENTDATE)-DAYS(CURRENTDATE-1000DAY);--1000

6、TO_CHAR()把时间转换成指定格式的字符串类型(db2较低版本不支持)。

“YYYY-MM-DD HH:MI:SS” 十二小时制;“YYYY-MM-DD HH24:MI:SS” 二十四小时制。

(“YYYY-MM-DD hh:mm:ss”不会报错,但是mm值取的是月的值。)

1
2
3
4
SELECTTO_CHAR(TIMESTAMP('2012-5-25 21:18:12'),'YYYY-MM-DD')FROMSYSIBM.DUAL;--2012-05-25
SELECTTO_CHAR(TIMESTAMP('2012-5-25 21:18:12'),'YYYY-MM-DD HH:MI:SS')FROMSYSIBM.DUAL;--2012-05-25 09:18:12
SELECTTO_CHAR(TIMESTAMP('2012-5-25 21:18:12'),'YYYY-MM-DD HH24:MI:SS')FROMSYSIBM.DUAL;--2012-05-25 21:18:12
(SELECTTO_CHAR(TIMESTAMP('2012-5-25 21:18:12'),'YYYY-MM-DD HH24:MM:SS')FROMSYSIBM.DUAL;--2012-05-25 21:05:12)

7、DAYNAME()返回指定日期的星期名,该星期名是由首字符大写、其他字符小写组成的英文名。

1
valuesDAYNAME(currenttimestamp)--Friday(当天为星期五)

8、DAYOFWEEK()返回参数中的星期几,用范围在 1-7 的整数值表示,其中 1 代表星期日。

1
valuesDAYOFWEEK(currenttimestamp);--6(当天为星期五)

9、DAYOFWEEK_ISO()返回参数中的星期几,用范围在 1-7 的整数值表示,其中 1 代表星期一。

1
valuesDAYOFWEEK_ISO(currenttimestamp);--5(当前为星期五)

10、DAYOFYEAR()返回参数中一年中的第几天,用范围在 1-366 的整数值表示。

1
valuesDAYOFYEAR(DATE('2012-02-01'));--32

11、MONTHNAME()对于参数的月部分的月份,返回一个大小写混合的字符串(例如,January)。

1
valuesMONTHNAME(CURRENTTIMESTAMP);--May(当前为五月)

12、WEEK()返回参数中一年的第几周,用范围在 1-54 的整数值表示。以星期日作为一周的开始。(参数可以为日期格式或者日期格式的字符串)

1
VALUESWEEK('2012-05-25')--21

13、TIMESTAMPDIFF(n,CHAR(TIMESTAMP('2012-05-25 10:23:24')-TIMESTAMP('2012-05-25 10:20:24')))根据两个时间戳记之间的时差,返回由第一个参数定义的类型表示的估计时差。(整除部分,不会四舍五入)

n=2:秒 ; n=4 :分; n=8:时;

n=16 :天; n=32 :周;n=64:月;

n=128 :季度; n=256:年;

1
2
3
4
5
6
7
8
VALUESTIMESTAMPDIFF(2,CHAR(TIMESTAMP('2012-05-25 10:23:24')-TIMESTAMP('2012-05-25 10:20:24')));--180秒
VALUESTIMESTAMPDIFF(4,CHAR(TIMESTAMP('2012-05-25 12:23:24')-TIMESTAMP('2012-05-25 10:20:22')));--123分钟
VALUESTIMESTAMPDIFF(8,CHAR(TIMESTAMP('2012-05-25 12:23:24')-TIMESTAMP('2012-05-25 10:20:22')));--2小时
VALUESTIMESTAMPDIFF(16,CHAR(TIMESTAMP('2012-07-25 12:23:24')-TIMESTAMP('2012-05-25 10:20:22')));--60天
VALUESTIMESTAMPDIFF(32,CHAR(TIMESTAMP('2012-07-25 12:23:24')-TIMESTAMP('2012-05-25 10:20:22')));--8周
VALUESTIMESTAMPDIFF(64,CHAR(TIMESTAMP('2012-07-25 12:23:24')-TIMESTAMP('2012-05-25 10:20:22')));--2月
VALUESTIMESTAMPDIFF(128,CHAR(TIMESTAMP('2012-08-25 10:20:22')-TIMESTAMP('2012-05-25 10:20:22')));--1季度
VALUESTIMESTAMPDIFF(256,CHAR(TIMESTAMP('2013-05-25 10:20:22')-TIMESTAMP('2012-05-25 10:20:22')));--1年

14、时期的格式。ISO,使用国际标准组织(ISO)制订的日期和时间格式;USA,使用美国日期和时间的 IBM 标准格式。

1
2
3
valueschar(currentdate,iso)--2012-05-25
valueschar(currentdate,usa)--05/25/2012
valueschar(currenttime,iso)--23.21.32
0 0