db2日期和时间函数常用知识汇总
[摘要]本文介绍db2日期和时间函数常用知识,包括DAYOFWEEK、DAYOFYEAR、MONTHNAME、TIMESTAMPDIFF、YEAR、MONTH、DAY等函数的介绍。
1、db2可以通过SYSIBM.SYSDUMMY1、SYSIBM.DUAL获取寄存器中的值,也可以通过VALUES关键字获取寄存器中的值。
1
2
3
|
SELECT'HELLO DB2'
FROM
SYSIBM.SYSDUMMY1;
--HELLO DB2
SELECT'HELLO DB2'
FROM
SYSIBM.DUAL;
--HELLO DB2
VALUES'HELLO DB2'
;
--HELLO DB2
|
2、CURRENT DATE获取当前日期;CURRENT TIME获取当前时间;CURRENT TIMESTAMP获取当前时间戳(含年、月、日、时、分、秒)。
1
2
3
|
VALUESCURRENT
DATE
--2012/5/25 0:00:00;
VALUESCURRENT
TIME
--20:48:53;
VALUESCURRENT
TIMESTAMP
--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
|
VALUES
YEAR
(
CURRENTTIMESTAMP
);/*2012*/
VALUES
YEAR
(
'2012-05-25 21:18:12'
);/*2012*/
VALUES
MONTH
(
CURRENTTIMESTAMP
);/*5*/
VALUES
MONTH
(
'2012-05-25 21:18:12'
);/*5*/
VALUES
DAY
(
CURRENTTIMESTAMP
);/*25*/
VALUES
DAY
(
'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'
)+1
YEAR
;
--2013/5/25 21:18:12
VALUESTIMESTAMP
(
'2012-5-25 21:18:12'
)+1
MONTH
;
--2012/6/25 21:18:12
VALUESTIMESTAMP
(
'2012-5-25 21:18:12'
)+1
DAY
;
--2012/5/26 21:18:12
VALUESTIMESTAMP
(
'2012-5-25 21:18:12'
)+1
HOUR
;
--2012/5/25 22:18:12
VALUESTIMESTAMP
(
'2012-5-25 21:18:12'
)+1
MINUTE
;
--2012/5/25 21:19:12
VALUESTIMESTAMP
(
'2012-5-25 21:18:12'
)+1
SECOND
;
--2012/5/25 21:18:13
VALUESTIMESTAMP
(
'2012-5-25 21:18:12'
)+1
YEAR
+1
MONTH
+1
DAY
+1
HOUR
+1
MINUTE
+1
SECOND
;
--2013/6/26 22:19:13
VALUESTIMESTAMP
(
'2012-5-25 21:18:12'
)-1
YEAR
-1
MONTH
-1
DAY
-1
HOUR
-1
MINUTE
-1
SECOND
;
--2011/4/24 20:17:11
|
5、通过days()可以获取两个时间相差天数。
1
|
VALUES
DAYS(
CURRENTDATE
)-DAYS(
CURRENTDATE
-1000
DAY
);
--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
|
SELECT
TO_CHAR(
TIMESTAMP
(
'2012-5-25 21:18:12'
),
'YYYY-MM-DD'
)
FROM
SYSIBM.DUAL;
--2012-05-25
SELECT
TO_CHAR(
TIMESTAMP
(
'2012-5-25 21:18:12'
),
'YYYY-MM-DD HH:MI:SS'
)
FROM
SYSIBM.DUAL;
--2012-05-25 09:18:12
SELECT
TO_CHAR(
TIMESTAMP
(
'2012-5-25 21:18:12'
),
'YYYY-MM-DD HH24:MI:SS'
)
FROM
SYSIBM.DUAL;
--2012-05-25 21:18:12
(
SELECT
TO_CHAR(
TIMESTAMP
(
'2012-5-25 21:18:12'
),
'YYYY-MM-DD HH24:MM:SS'
)
FROM
SYSIBM.DUAL;
--2012-05-25 21:05:12)
|
7、DAYNAME()返回指定日期的星期名,该星期名是由首字符大写、其他字符小写组成的英文名。
1
|
values
DAYNAME(
currenttimestamp
)
--Friday(当天为星期五)
|
8、DAYOFWEEK()返回参数中的星期几,用范围在 1-7 的整数值表示,其中 1 代表星期日。
1
|
values
DAYOFWEEK(
currenttimestamp
);
--6(当天为星期五)
|
9、DAYOFWEEK_ISO()返回参数中的星期几,用范围在 1-7 的整数值表示,其中 1 代表星期一。
1
|
values
DAYOFWEEK_ISO(
currenttimestamp
);
--5(当前为星期五)
|
10、DAYOFYEAR()返回参数中一年中的第几天,用范围在 1-366 的整数值表示。
1
|
values
DAYOFYEAR(
DATE
(
'2012-02-01'
));
--32
|
11、MONTHNAME()对于参数的月部分的月份,返回一个大小写混合的字符串(例如,January)。
1
|
values
MONTHNAME(
CURRENTTIMESTAMP
);
--May(当前为五月)
|
12、WEEK()返回参数中一年的第几周,用范围在 1-54 的整数值表示。以星期日作为一周的开始。(参数可以为日期格式或者日期格式的字符串)
1
|
VALUES
WEEK(
'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
|
VALUES
TIMESTAMPDIFF(2,
CHAR
(
TIMESTAMP
(
'2012-05-25 10:23:24'
)-
TIMESTAMP
(
'2012-05-25 10:20:24'
)));
--180秒
VALUES
TIMESTAMPDIFF(4,
CHAR
(
TIMESTAMP
(
'2012-05-25 12:23:24'
)-
TIMESTAMP
(
'2012-05-25 10:20:22'
)));
--123分钟
VALUES
TIMESTAMPDIFF(8,
CHAR
(
TIMESTAMP
(
'2012-05-25 12:23:24'
)-
TIMESTAMP
(
'2012-05-25 10:20:22'
)));
--2小时
VALUES
TIMESTAMPDIFF(16,
CHAR
(
TIMESTAMP
(
'2012-07-25 12:23:24'
)-
TIMESTAMP
(
'2012-05-25 10:20:22'
)));
--60天
VALUES
TIMESTAMPDIFF(32,
CHAR
(
TIMESTAMP
(
'2012-07-25 12:23:24'
)-
TIMESTAMP
(
'2012-05-25 10:20:22'
)));
--8周
VALUES
TIMESTAMPDIFF(64,
CHAR
(
TIMESTAMP
(
'2012-07-25 12:23:24'
)-
TIMESTAMP
(
'2012-05-25 10:20:22'
)));
--2月
VALUES
TIMESTAMPDIFF(128,
CHAR
(
TIMESTAMP
(
'2012-08-25 10:20:22'
)-
TIMESTAMP
(
'2012-05-25 10:20:22'
)));
--1季度
VALUES
TIMESTAMPDIFF(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
|
values
char
(
current
date
,iso)
--2012-05-25
values
char
(
current
date
,usa)
--05/25/2012
values
char
(
current
time
,iso)
--23.21.32
|