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

[ACDU 翻译] MySQL 11.2.6 时间值中的小数秒

原创 由迪 2021-12-29
553

MySQL 对TIMEDATETIMETIMESTAMP值具有小数秒支持 , 精度高达微秒(6 位):

  • 要定义包含分数秒部分的列,使用语法 ,其中是 , ,或 ,并且 是分数秒精度。例如: *type_name*(*fsp*)type_nameTIMEDATETIMETIMESTAMPfsp

    CREATE TABLE t1 (t TIME(3), dt DATETIME(6));

    该*fsp*值(如果给定)必须在 0 到 6 的范围内。值 0 表示没有小数部分。如果省略,则默认精度为 0。(这与标准 SQL 默认值 6 不同,以便与以前的 MySQL 版本兼容。)

  • 插入TIMEDATETIMESTAMP具有小数部分秒值到相同类型的一列,但在舍入具有较少的小数位的结果。考虑如下创建和填充的表:

    CREATE TABLE fractest( c1 TIME(2), c2 DATETIME(2), c3 TIMESTAMP(2) ); INSERT INTO fractest VALUES ('17:51:04.777', '2018-09-08 17:51:04.777', '2018-09-08 17:51:04.777');

    时间值通过四舍五入插入到表中:

    mysql> SELECT * FROM fractest; +-------------+------------------------+------------------------+ | c1 | c2 | c3 | +-------------+------------------------+------------------------+ | 17:51:04.78 | 2018-09-08 17:51:04.78 | 2018-09-08 17:51:04.78 | +-------------+------------------------+------------------------+

    发生这种舍入时不会给出警告或错误。此行为遵循 SQL 标准。

    要插入带有截断的值,请启用 TIME_TRUNCATE_FRACTIONAL SQL 模式:

    SET @@sql_mode = sys.list_add(@@sql_mode, 'TIME_TRUNCATE_FRACTIONAL');

    启用该 SQL 模式后,将插入时态值并截断:

    mysql> SELECT * FROM fractest; +-------------+------------------------+------------------------+ | c1 | c2 | c3 | +-------------+------------------------+------------------------+ | 17:51:04.77 | 2018-09-08 17:51:04.77 | 2018-09-08 17:51:04.77 | +-------------+------------------------+------------------------+
  • 采用时间参数的函数接受带有小数秒的值。时态函数的返回值包括适当的小数秒。例如, NOW()不带参数返回不带小数部分的当前日期和时间,但采用从 0 到 6 的可选参数来指定返回值包括那么多数字的小数秒部分。

  • 时态文字的语法产生时态值: 、 、 和,以及 ODBC 语法等价物。如果指定,结果值包括尾随小数秒部分。以前,时间类型关键字被忽略,这些构造生成字符串值。请参阅 标准 SQL 和 ODBC 日期和时间文字DATE '*str*'``TIME '*str*'``TIMESTAMP '*str*'

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

评论