# **UNIX_TIMESTAMP()**

## **函数说明**

``UNIX_TIMESTAMP()`` 返回自 *1970-01-01 00:00:00* UTC 至当前时间的秒数。

``UNIX_TIMESTAMP(date)`` 将参数的值返回为 *1970-01-01 00:00:00* UTC 至 *date* 指定时间的秒数。

如果日期超出范围传递给 ``UNIX_TIMESTAMP()``，它将返回 0。如果 ``date`` 为 ``NULL``，则返回 ``NULL``。

如果没有给出参数或参数不包含小数秒部分，则返回值为整数；如果给出参数包含小数秒部分，则返回值为 ``DECIMAL``。

## **函数语法**

```text
> UNIX_TIMESTAMP([date])
```

### **参数释义**

|  参数   | 说明 |
|  ----  | ----  |
| date  | 可选参数。date 参数是合法的日期表达式。<br> date 参数可以是 ``DATE``、``DATETIME`` 或 ``TIMESTAMP`` 字符串，也可以是 *YYMMDD*、*YYMMDDhhmmss*、*YYYYMMDD* 或 *YYYYMMDDhhmmss* 格式的数字。如果 date 参数包含时间部分，则它有选择地包含秒的小数部分。 <br>当 date 参数是 ``TIMESTAMP`` 时，``UNIX_TIMESTAMP()`` 直接返回内部时间戳值，而不进行隐含的 *string-to-Unix-timestamp* 转换。|

### 非 UTC 时区的值和 Unix 时间戳值之间的转换

如果使用 `UNIX_TIMESTAMP()` 和 `FROM_UNIXTIME()` 在非 UTC（Coordinated Universal Time，协调世界时）时区的值和 Unix 时间戳值之间进行转换，则转换是有损的，因为映射在两个方向上不是一对一的。例如，由于诸如夏令时 (DST) 等本地时区更改的约定，`UNIX_TIMESTAMP()` 可以将在非 UTC 时区中不同的两个值映射到相同的 Unix 时间戳值。`FROM_UNIXTIME()` 将该值仅映射回原始值之一。下面的示例，即，使用在 `MET` 时区不同的值：

```text
mysql> SET time_zone = 'MET';
Query OK, 0 rows affected (0.01 sec)

mysql> SELECT UNIX_TIMESTAMP('2005-03-27 03:00:00');
+-------------------------------------+
| unix_timestamp(2005-03-27 03:00:00) |
+-------------------------------------+
|                          1111885200 |
+-------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT UNIX_TIMESTAMP('2005-03-27 02:00:00');
+-------------------------------------+
| unix_timestamp(2005-03-27 02:00:00) |
+-------------------------------------+
|                          1111885200 |
+-------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT FROM_UNIXTIME(1111885200);
+---------------------------+
| from_unixtime(1111885200) |
+---------------------------+
| 2005-03-27 03:00:00       |
+---------------------------+
1 row in set (0.00 sec)
```

## **示例**

```text
mysql> SELECT UNIX_TIMESTAMP("2016-07-11");
+----------------------------+
| unix_timestamp(2016-07-11) |
+----------------------------+
|                 1468188000 |
+----------------------------+
1 row in set (0.00 sec)

mysql> SELECT UNIX_TIMESTAMP('2015-11-13 10:20:19');
+-------------------------------------+
| unix_timestamp(2015-11-13 10:20:19) |
+-------------------------------------+
|                          1447406419 |
+-------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT UNIX_TIMESTAMP('2015-11-13 10:20:19.012');
+-----------------------------------------+
| unix_timestamp(2015-11-13 10:20:19.012) |
+-----------------------------------------+
|                       1447406419.012000 |
+-----------------------------------------+
1 row in set (0.00 sec)
```

## **限制**

目前 date 格式只支持 `yyyy-mm-dd` 和 `yyyymmdd` 的数据格式。
