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 |
+-----------------------------+