四、SQL函数③(日期时间函数)

分类:根据表示的类型、精度的不同,数据库中的日期时间数据类型分为日期、时间、日期时间、时间戳四种类型。

日期类型:用来表示“年-月-日”信息的数据类型,其精度精确到“日”,其中包含了年、月、日三个信息,比如“2008-08-08”。
在数据库中,一般用Date来表示日期类型。

时间类型:用来表示“小时:分:秒”信息的数据类型,其精度精确到“秒”,其中包含了小时、分、秒三个信息,比如“19:00:00”。
在数据库中,一般用Time来表示时间类型。

日期时间类型:用来表示“年-月-日小时:分:秒”信息的数据类型,其精度精确到“秒”,其中包含了年、月、日、小时、分、秒六个信息,比如“2008-08-08 08:00:00”。
日期时间类型可以用来表示“北京奥运会开幕式准确时间”、“上次迟到时间”等信息。
在数据库中,一般用DateTime来表示日期时间类型。

对于精度要求更加高的日期时间信息则无法表示,如“刘翔跑到终点的时间”、“货物A经过射频识别器的时间”等更高精度要求的信息。时间戳类型:表示对精度要求更加高的场合。时间戳类型还可以用于标记表中数据的版本信息。
在数据库中,一般用TimeStamp表示日期时间类型。

不同的数据库系统对日期、时间、日期时间与时间戳等数据类型的支持差异性非常大,有的数据类型在有的数据库系统中不被支持,而有的数据类型的表示精度则和其类型名称所暗示的精度不同。
如MSSQLServer中不支持Time类型、Oracle中的Date类型中包含时间信息。
数据库中的日期时间函数对这些类型的支持差别是非常小的,因此在一般情况下我们将这些类型统一称为“日期时间类型”。

主流数据库系统中日期时间类型的表示方式

MYSQL、MSSQLServer和DB2中

可以用字符串来表示日期时间类型,数据库系统会自动在内部将它们转换为日期时间类型。如:
“"2008-08-08"”、“2008-08-08 08:00:00”、“08:00:00” 、“2008-08-08 08:00:00.000000”等。

oracle

在Oracle中以字符串表示的数据是不能自动转换为日期时间类型的,必须使用TO_DATE()函数来手动将字符串转换为日期时间类型
如:TO_DATE("2008-08-08","YYYY-MM-DD HH24:MI:SS") 、TO_DATE("2008-08-08 08:00:00", "YYYY-MM-DD HH24:MI:SS")、TO_DATE("08:00:00", "YYYY-MM-DD HH24:MI:SS")等。

取得当前日期时间

MYSQL:NOW()函数用于取得当前的日期时间,NOW()函数还有SYSDATE()、CURRENT_TIMESTAMP等别名。如下:

SELECT NOW(),SYSDATE(),CURRENT_TIMESTAMP

执行结果:

NOW() SYSDATE() CURRENT_TIMESTAMP
2008-01-12 01:13:19 2008-01-12 01:13:19 2008-01-12 01:13:19

若想得到不包括时间部分的当前日期,则可以使用CURDATE()函数,CURDATE()函数还有CURRENT_DATE等别名。如下:

SELECT CURDATE(),CURRENT_DATE

执行结果:

CURDATE() CURRENT_DATE
2008-01-12 2008-01-12

如果想得到不包括日期部分的当前时间,则可以使用CURTIME()函数,CURTIME()函数还有CURRENT_TIME等别名。如下:

SELECT CURTIME(),CURRENT_TIME

执行结果:

CURTIME() CURRENT_TIME
01:17:09 01:17:09

MSSQLServer:GETDATE()函数用于取得当前日期时间,如下:

[code=java]

SELECT GETDATE() as 当前日期时间

执行结果:

当前日期时间
2008-01-12 01:02:04.78

可以看到GETDATE()返回的信息是包括了日期、时间(精确到秒以后部分)的时间戳信息。
MSSQLServer 没有专门提供取得当前日期、取得当前时间的函数,但可以将GETDATE()的返回值进行处理,这里需要借助于Convert()函数。

使用CONVERT(VARCHAR(50) ,日期时间值, 101)可以得到日期时间值的日期部分,如:

SELECT CONVERT(VARCHAR(50) ,GETDATE( ), 101) as 当前日期

执行结果:

当前日期
01/14/2008

使用CONVERT(VARCHAR(50),日期时间值,108)可以得到日期时间值的日期部分,如:

SELECT CONVERT(VARCHAR(50) ,GETDATE(), 108) as 当前时间

执行结果:

当前时间
21:37:19

Oracle中没有提供取得当前日期时间的函数,不过我们可以到系统表DUAL 中查询SYSTIMESTAMP的值来得到当前的时间戳。如下:

SELECT SYSTIMESTAMP FROM DUAL

执行结果:

SYSTIMESTAMP
2008-1-14 21.46.42.78000000 8:0

同样,可以到系统表DUAL中查询SYSDATE 的值来得到当前日期时间。如下:

SELECT SYSDATE FROM DUAL

执行结果:

SYSDATE
2008-01-14 21:47:16.0

同样,Oracle中也没有专门提供取得当前日期、取得当前时间的函数,不过我们可以将SYSDATE的值进行处理,这里需要借助于TO_CHAR()函数。

使用 TO_CHAR(时间日期值, "YYYY-MM-DD") 可以得到日期时间值的日期部分

SELECT TO_CHAR(SYSDATE, "YYYY-MM-DD") FROM DUAL

执行结果:

TO_CHAR(SYSDATE,YYYY-MM-DD)
2008-01-14

使用TO_CHAR(时间日期值, "HH24:MI:SS") 可以得到日期时间值的时间部分,如:

SELECT TO_CHAR(SYSDATE, "HH24:MI:SS") FROM DUAL

执行结果:

TO_CHAR(SYSDATE,HH24:MI:SS)
21:56:13

DB2

DB2中同样没有提供取得当前日期时间的函数,不过我们可以到系统表SYSIBM.SYSDUMMY1中查询CURRENT TIMESTAMP的值来得到当前时间戳。
如下:

SELECT CURRENT TIMESTAMP FROM SYSIBM.SYSDUMMY1

执行结果:

1
2008-01-14-21.58.20.01515000

从系统表SYSIBM.SYSDUMMY1中查询CURRENT DATE 的值来得到当前日期值。如下:

SELECT CURRENT DATE FROM SYSIBM.SYSDUMMY1

执行结果:

1
2008-01-14

从系统表SYSIBM.SYSDUMMY1中查询CURRENT TIME的值来得到当前日期值。如下:

SELECT CURRENT TIME FROM SYSIBM.SYSDUMMY1

执行结果:

1
22:05:48

猜你喜欢

转载自blog.csdn.net/qq_41389678/article/details/112005052