一、日期是如何存储的

    1、日期和时间的标准数据类型
        日期和时间(DATETIME)存储的标准SQL数据类型有3种
        DATE:存储日期。DATE的格式是YYYY-MM-DD,范围是从0001-01-01到9999-12-31。
        TIME:存储时间。TIME的格式是HH:MI:SS.nn…,范围是从00:00:00…到23:59:61.999…。
        TIMESTAMP:存储日期和时间。TIMESTAMP的格式是YYYY-MM-DD HH:MI:SS.nn…,范围是从0001-01-01 00:00:00…到9999-12-31 23:59:61.999…。

    2、DATETIME元素
        DATETIME元素 有效范围
        YEAR  0001到9999
        MONTH 01到12
        DAY  01到31        HOUR 00到23
        MINUTE 00到59
        SECOND 00.000…到61.999…

    3、不同实现的日期类型

不同平台的日期类型

产品

数据类型

用途

Oracle

DATE

存储日期和时间信息

SQL Server

DATETIME

存储日期和时间信息

SMALLDATETIME

存储日期和时间信息,但取值范围小于DATETIME

DATE

存储日期值

TIME

存储时间值

MySQL

DATETIME

存储日期和时间值

TIMESTAMP

存储日期和时间值

DATE

存储日期值

TIME

存储时间值

YEAR

单字节,表示年

二、日期函数

    日期函数用于调整日期和时间的数据外观,以适当的方式显示日期和时间数据、进行比较、计算日期之间的间隔等。

    1、当前日期
        从根本上来说,当前日期保存在数据库所在的计算机上时,被称为系统日期。

        不同实现里获取系统日期的方法:

        SQL Server使用GETDATE()的函数获取系统日期。
        SELECT GETDATE()

        MySQL使用NOW()函数获取当前日期和时间。NOW被称为伪字段。
        SELECT NOW()

        Oracle使用SYSDATE函数获取当前日期和时间,并使用了Oracle中的DUAL表。
        SELECT SYSDATE FROM DUAL

    2、时区
        在处理日期和时间信息时,可能要考虑时区。不同时区,不同日期和时间信息。

    3、时间和日期相加

        SQL Server的DATEADD函数:
        DATEADD(MONTH, 1, DATE_HIRE)

        Oracle的ADD_MONTHS函数:
        ADD_MONTHS(DATE_HIRE,1)

        Oracle的日期增加一天:
        DATE_HIRE + 1

        MySQL使用ANSI标准的INTERVAL命令:
        DATE_ADD(DATE_HIRE, INTERVAL 1 DAY)

    4、其他日期函数

其它日期函数

产品

日期函数

用途

SQL Server

DATEPART

返回日期的某个元素的整数值

DATENAME

返回日期的某个元素的文本值

GETDATE()

返回系统时间

DATEDIFF

返回两个日期之间由指定日期元素表示的间隔,比如天数、分钟数和秒数

Oracle

NEXT_DAY

返回指定日期之后的下一天(比如FRIDAY)

MONTHS_BETWEEN

返回两个日期之间相差的月数

MySQL

DAYNAME(date)

显示星期几

DAYOFMONTH(date)

显示几日

DAYOFWEEK(date)

显示星期几

DAYOFYEAR(date)

显示一年中的第几天

三、日期转换

    进行日期转换的典型原因有:
    比较不同数据类型的日期值;
    把日期格式转换为字符串;
    把字符串转换为日期格式。

    ANSI的CAST操作符可以把一种数据类型转换为另一种,其基本语法如下:
    CAST(EXPRESSION AS NEW_DATA_TYPE)

    1、日期描述
        日期描述由格式元素组成,用于从数据库以期望的格式提取日期和时间信息。
        常见的日期元素

    2、日期转换为字符串

        SQL Server使用的DATETIME
        DATE_HIRE = DATETIME(MONTH, DATE_HIRE)

        Oracle使用的TO_CHAR函数
        TO_CHAR(DATE_HIRE, ‘Month dd, yyyy’)

    3、字符串转换为日期

        MySQL的STR_TO_DATE
        STR_TO_DATE('01/01/2010 12:00:00 AM', '%m/%d/%Y %h:%i:%s %p')

        SQL Server的CONVERT
        CONVER(DATETIME,’02/25/2010 12:00:00 AM’)