跳到主要内容
最后 更新

MICROSECOND

描述

MICROSECOND 函数用于提取输入日期时间值小数部分的前六位,返回范围为 0 到 999999。该函数支持 DATETIME 和 TIMESTAMP_NS。精度不足六位时在右侧补 0;对于 TIMESTAMP_NS,忽略最后三位纳秒数字。如需获取完整九位小数,请使用 NANOSECOND

该函数与 mysql 中的 microsecond 函数 行为一致。

语法

MICROSECOND(`<datetime>`)

参数

参数说明
<datetime>输入的日期时间值,类型为 DATETIME 或 TIMESTAMP_NS。支持的格式请参见 DATETIME 的转换TIMESTAMP_NS 的转换

返回值

返回类型为 INT,返回日期时间值中的微秒部分。取值范围为 0 到 999999。对于精度小于 6 的输入,不足的位数补 0。

  • 若输入的日期时间不含微秒部分(如 '2023-01-01 10:00:00'),返回 0。
  • 若输入为 NULL,返回 NULL。
  • 若输入的日期时间微秒精度小于 6 位,不足的位数自动补 0(例如 12:34:56.123 会解析为 123000 微秒)
  • 对于 TIMESTAMP_NS,函数返回小数部分的前六位,不对最后三位进行四舍五入。

举例


--- 提取含 6 位微秒的值
SELECT MICROSECOND(CAST('1999-01-02 10:11:12.000123' AS DATETIME(6)));
+----------------------------------------------------------------+
| MICROSECOND(CAST('1999-01-02 10:11:12.000123' AS DATETIME(6))) |
+----------------------------------------------------------------+
| 123 |
+----------------------------------------------------------------+

---scale 为 4
SELECT MICROSECOND(CAST('1999-01-02 10:11:12.0123' AS DATETIME(4)));
+--------------------------------------------------------------+
| MICROSECOND(CAST('1999-01-02 10:11:12.0123' AS DATETIME(4))) |
+--------------------------------------------------------------+
| 12300 |
+--------------------------------------------------------------+

--- 微秒部分补 0(精度不足 6 位)
SELECT MICROSECOND(CAST('1999-01-02 10:11:12.123' AS DATETIME(6)));
+-------------------------------------------------------------+
| MICROSECOND(CAST('1999-01-02 10:11:12.123' AS DATETIME(6))) |
+-------------------------------------------------------------+
| 123000 |
+-------------------------------------------------------------+

---不带有 scale 的日期时间,则返回 0
SELECT MICROSECOND(CAST('1999-01-02 10:11:12' AS DATETIME(6)));
+---------------------------------------------------------+
| MICROSECOND(CAST('1999-01-02 10:11:12' AS DATETIME(6))) |
+---------------------------------------------------------+
| 0 |
+---------------------------------------------------------+

--- 对于 TIMESTAMP_NS,忽略最后三位纳秒数字
SELECT MICROSECOND(CAST('2025-01-02 03:04:05.123456789' AS TIMESTAMP_NS));
+-----------------------------------------------------------------------+
| MICROSECOND(CAST('2025-01-02 03:04:05.123456789' AS TIMESTAMP_NS)) |
+-----------------------------------------------------------------------+
| 123456 |
+-----------------------------------------------------------------------+

--- 输入字符串同时适用于 datetime/time 时,优先按 time 解析
SELECT MICROSECOND("22:12:12.123456");
+--------------------------------+
| MICROSECOND("22:12:12.123456") |
+--------------------------------+
| 123456 |
+--------------------------------+

---输入 NULL,返回 NULL
SELECT MICROSECOND(NULL);
+-------------------+
| MICROSECOND(NULL) |
+-------------------+
| NULL |
+-------------------+