跳到主要内容

MILLISECOND_TIMESTAMP

描述

MILLISECOND_TIMESTAMP 函数用于将输入的日期时间值转换为从 1970-01-01 00:00:00 加上本地时区偏移,开始计算的 Unix 时间戳,单位为毫秒(1 秒 = 1,000,000 毫秒)。该函数支持处理包含毫秒精度的 DATETIME 类型,转换时会自动忽略时区差异(默认以 UTC 时间为基准)

语法

MILLISECOND_TIMESTAMP(`<datetime>`)

参数

参数说明
<datetime>表示要转换为 Unix 时间戳的日期时间,支持输入 datetime 类型,具体 datetime 格式请查看 datetime 的转换

返回值

返回 BIGINT 类型的整数,表示输入日期时间转换为当前时区所对应的时间戳(从 1970-01-01 00:00:00 加上本地时区偏移 开始的总毫秒数),时区设置请查看 时区管理

  • 若输入为 NULL,返回 NULL。
  • 转换含微秒的时间(自动截断为毫秒)
  • 输入日期时间在1970-01-01 00:00:00.000 UTC 之前,结果返回负数

举例

---转换含 (scale) 毫秒的 DATETIME,执行机器所在时区为东八区
SELECT MILLISECOND_TIMESTAMP('2025-01-23 12:34:56.123');
+--------------------------------------------------+
| MILLISECOND_TIMESTAMP('2025-01-23 12:34:56.123') |
+--------------------------------------------------+
| 1737606896123 |
+--------------------------------------------------+

---显式指定时区为 UTC
SELECT MILLISECOND_TIMESTAMP('2025-01-23 12:34:56.123 UTC');
+------------------------------------------------------+
| MILLISECOND_TIMESTAMP('2025-01-23 12:34:56.123 UTC') |
+------------------------------------------------------+
| 1737635696123 |
+------------------------------------------------------+

--- 转换含微秒的时间(自动截断为毫秒)
SELECT MILLISECOND_TIMESTAMP('2024-01-01 00:00:00.123456');
+-----------------------------------------------------+
| MILLISECOND_TIMESTAMP('2024-01-01 00:00:00.123456') |
+-----------------------------------------------------+
| 1704038400123 |
+-----------------------------------------------------+

---指定时区超出范围,返回 NULL
SELECT MILLISECOND_TIMESTAMP('2025-01-23 12:34:56.123456 +15:00');
+------------------------------------------------------------+
| MILLISECOND_TIMESTAMP('2025-01-23 12:34:56.123456 +15:00') |
+------------------------------------------------------------+
| NULL |
+------------------------------------------------------------+

---若输入日期时间在 1970 年之前(标准 UTC),返回负数
SELECT MILLISECOND_TIMESTAMP('1960-01-01 00:00:00 UTC');
+---------------------------------------------------+
| MILLISECOND_TIMESTAMP('1960-01-01 00:00:00 UTC') |
+---------------------------------------------------+
| -315619200000000 |
+---------------------------------------------------+

---输入 date 类型,时间部分自动设置为 00:00:00.000(因为在东八区,所有结果为负数)
SELECT MILLISECOND_TIMESTAMP('1970-01-01');
+-------------------------------------+
| MILLISECOND_TIMESTAMP('1970-01-01') |
+-------------------------------------+
| -28800000 |
+-------------------------------------+
---输入 NULL,返回 NULL
SELECT MILLISECOND_TIMESTAMP(NULL);
+-----------------------------+
| MILLISECOND_TIMESTAMP(NULL) |
+-----------------------------+
| NULL |
+-----------------------------+