• 首页
  • css3教程
  • html5教程
  • vue手册
  • php手册
  • MySQL手册
  • redis手册
  • jQuery手册
  • 日期和时间类型之间的转换

    在某种程度上,您可以将值从一种时间类型转换为另一种时间类型。但是,价值可能会有所变化或信息丢失。在所有情况下,时间类型之间的转换都取决于结果类型的有效值范围。例如,尽管DATEDATETIMETIMESTAMP值都可以使用同一组格式来指定,但是这些类型并不都具有相同的值范围。TIMESTAMP值不能早于1970UTC或晚于'2038-01-19 03:14:07'UTC。这表示日期,例如'1968-01-01',虽然有效为a DATEDATETIME值,但无效为TIMESTAMP值并将其转换为0

    DATE值转换:

    • 转换为DATETIMETIMESTAMP值会添加一个时间部分,'00:00:00'因为该DATE值不包含任何时间信息。
    • 转换为TIME值没有用;结果是'00:00:00'

    DATETIMETIMESTAMP值的转换:

    • 转换为DATE值需要考虑小数秒,并舍入时间部分。例如,'1999-12-31 23:59:59.499'变为'1999-12-31',而'1999-12-31 23:59:59.500'变为'2000-01-01'
    • 转换为TIME值会丢弃日期部分,因为该TIME类型不包含日期信息。

    为了将TIME值转换为其他时间类型,CURRENT_DATE()日期值使用的值。将TIME被解释为经过的时间(不是当天的时间),并添加到日期。这意味着,如果时间值在从'00:00:00'到的范围之外,则结果的日期部分不同于当前日期'23:59:59'

    假设当前日期为'2012-01-01'TIME的值'12:00:00''24:00:00'以及'-12:00:00',当转换成DATETIMETIMESTAMP值,导致'2012-01-01 12:00:00''2012-01-02 00:00:00''2011-12-31 12:00:00'分别。

    转换TIMEDATE:是类似的,但丢弃时间部分从结果'2012-01-01''2012-01-02'以及'2011-12-31'分别。

    显式转换可用于覆盖隐式转换。例如,在和的比较中DATE,通过添加的时间部分DATETIMEDATE值强制转换为DATETIME类型'00:00:00'。要通过忽略DATETIME值的时间部分来执行比较,请按CAST()以下方式使用该函数:

    date_col = CAST(datetime_col AS DATE)
    

    TIME和转换DATETIME为数字形式(例如,通过添加 +0)取决于该值是否包含小数秒部分。或在为0(或省略)时转换为整数,而在大于0 时转换为带小数位的值:TIME(N)DATETIME(N)NDECIMALNN

    mysql> SELECT CURTIME(), CURTIME()	+0, CURTIME(3)	+0;
    +-----------	+-------------	+--------------	+
    | CURTIME() 	| CURTIME()		+0 	| CURTIME(3)		+0 	|
    +-----------	+-------------	+--------------	+
    | 09:28:00  	|       92800 	|    92800.887 	|
    +-----------	+-------------	+--------------	+
    mysql> SELECT NOW(), NOW()	+0, NOW(3)	+0;
    +---------------------	+----------------	+--------------------	+
    | NOW()               	| NOW()		+0        	| NOW(3)		+0           	|
    +---------------------	+----------------	+--------------------	+
    | 2012	-08	-15 09:28:00 	| 20120815092800 	| 20120815092800.889 	|
    +---------------------	+----------------	+--------------------	+