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

作者: 小小一颗卤蛋 | 来源:发表于2020-04-15 22:49 被阅读0次

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

    日期类型:用来表示“年-月-日”信息的数据类型,其精度精确到“日”,其中包含了年、月、日三个信息,比如“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
    

    相关文章

      网友评论

        本文标题:四、SQL函数③(日期时间函数)

        本文链接:https://www.haomeiwen.com/subject/kpgfvhtx.html