暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[ACDU翻译] MySQL 11.2.7 日期和时间类型之间的转换

原创 由迪 2021-12-30
1072

在某种程度上,您可以将值从一种时态类型转换为另一种时态类型。但是,可能会有一些价值的改变或信息的丢失。在所有情况下,时间类型之间的转换都受结果类型的有效值范围的约束。例如,虽然 DATEDATETIMETIMESTAMP值都可以使用相同的格式集指定,但这些类型并不都具有相同的值范围。 TIMESTAMP值不能早于1970UTC 或晚于 '2038-01-19 03:14:07'UTC。这意味着诸如 的日期'1968-01-01'虽然作为 aDATEDATETIME值有效,但作为 值无效 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'分别。

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

date_col = CAST(datetime_col AS DATE)

TIMEDATETIME值转换为数字形式(例如,通过添加+0)取决于该值是否包含小数秒部分。 or 为0(或省略)时转换为整数,大于0时转换为带十进制数字 的值 : TIME(*N*)DATETIME(*N*)NDECIMALN**N

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 | +---------------------+----------------+--------------------+
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论