zoukankan      html  css  js  c++  java
  • 日期时间函数

    日期时间类型的数据也是经常用到的,比如员工出生日期、结账日期、入库日期等等,而且经常需要对这些数据进行处理,比如检索所有超过保质期的商品、将结账日期向后延迟3天、检索所有每个月18日的入库记录,进行这些处理就需要使用日期时间函数。SQL中提供了丰富的日期时间函数用于完成这些功能,本节将对这些日期时间函数进行详细讲解。

    • 日期、时间、日期时间与时间戳

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

    日期类型是用来表示“年-月-日”信息的数据类型,其精度精确到“日”,其中包含了年、月、日三个信息,比如“2008-08-08”。日期类型可以用来表示“北京奥运会开幕式日期”、“王小明的出生年月日”等信息,但是无法表示“最近一次迟到的时间”、“徐总抵京时间”等精确到小时甚至分秒的数据。在数据库中,一般用Date来表示日期类型。

    时间类型是用来表示“小时:分:秒”信息的数据类型,其精度精确到“秒”,其中包含了小时、分、秒三个信息,比如“19:00:00”。时间类型可以用来表示“每天《新闻联播》的播出时间”、“每天的下班时间”等信息,但是无法表示“卢沟桥事变爆发日期”、“上次结账时间”等包含“年-月-日”等信息的数据。在数据库中,一般用Time来表示时间类型。

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

    日期时间类型的精度精确到“秒”,这在一些情况下能够满足基本的要求,但是对于精度要求更加高的日期时间信息则无法表示,比如“刘翔跑到终点的时间”、“货物A经过射频识别器的时间”等更高精度要求的信息。数据库中提供了时间戳类型用于表示这些对精度要求更加高的场合。时间戳类型还可以用于标记表中数据的版本信息,比如我们想区分表中两条记录插入表中的先后顺序,由于数据库操作速度非常快,如果用DateTime 类型记录输入插入时间的话,若两条记录插入的时间间隔非常短的话是无法区分它们的,这时就可以使用时间戳类型。在有的数据库系统中,如果对数据表中的记录进行了更新的话,数据库系统会自动更新其中的时间戳字段的值。数据库中,一般用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中以字符串表示的数据是不能自动转换为日期时间类型的,必须使用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")等。

    • 取得当前日期时间

    在系统中经常需要使用当前日期时间进行处理,比如将“入库时间”字段设定为当前日期时间,在SQL中提供了取得当前日期时间的方式,不过各个数据库中的实现方式各不相同。

    • MYSQL

    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
    
    • MSQLServer

    MSSQLServer中用于取得当前日期时间的函数为GETDATE()。如下:

    
    SELECT GETDATE() as 当前日期时间
    
    执行完毕我们就能在输出结果中看到下面的执行结果:
    
    ```java  
    
    当前日期时间
    
    2008-01-12 01:02:04.78
    

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

    使用CONVERT(VARCHAR(50) ,日期时间值, 101)可以得到日期时间值的日期部分,因此下面的SQL语句可以得到当前的日期值:

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

    执行完毕我们就能在输出结果中看到下面的执行结果:

    
    当前日期
    
    01/14/2008
    

    使用CONVERT(VARCHAR(50),日期时间值,108)可以得到日期时间值的日期部分,因此下面的SQL语句可以得到当前的日期值:

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

    执行完毕我们就能在输出结果中看到下面的执行结果:

    
    当前时间
    
    21:37:19
    
    • Oracle

    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") 可以得到日期时间值的日期部分,因此下面的SQL语句可以得到当前的日期值:

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

    执行完毕我们就能在输出结果中看到下面的执行结果:

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

    使用TO_CHAR(时间日期值, "HH24:MI:SS") 可以得到日期时间值的时间部分,因此下面的SQL语句可以得到当前的日期值:

    
    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
  • 相关阅读:
    Python动态展示遗传算法求解TSP旅行商问题
    MOEAD算法中均匀权向量的实现---Python
    HDU 5294 多校第一场1007题 最短路+最小割
    POJ 3261 Milk Patterns sa+二分
    HDU 4292 FOOD 2012 ACM/ICPC Asia Regional Chengdu Online
    CodeForces 201A Clear Symmetry
    POJ 1679 The Unique MST 确定MST是否唯一
    POJ 3268 Silver Cow Party 最短路 基础题
    POJ 2139 SIx Degrees of Cowvin Bacon 最短路 水題
    POJ2229 Sumsets 基礎DP
  • 原文地址:https://www.cnblogs.com/yuyu666/p/9814076.html
Copyright © 2011-2022 走看看