Перейти к содержимому
Последнее обновление

FROM_UNIXTIME

Описание​

Функция FROM_UNIXTIME преобразует временную метку Unix (в секундах) в строку даты и времени или значение типа VARCHAR в указанном формате. За точку отсчёта временных меток Unix принимается 1970-01-01 00:00:00 UTC. Функция формирует соответствующее представление даты и времени на основе входной временной метки и строки формата. %f выводит микросекунды и округляет значение до шести знаков; %n сохраняет и выводит до девяти знаков дробной части с наносекундной точностью.

Эта функция соответствует функции from_unixtime в MySQL.

Синтаксис​

FROM_UNIXTIME(<unix_timestamp> [, <string_format>])

Параметры​

ПараметрОписание
<unix_timestamp>Входная временная метка Unix типа BIGINT или DECIMAL, представляющая количество секунд (с необязательной дробной частью) с момента 1970-01-01 00:00:00 UTC
<string_format>Строка формата; поддерживаются типы varchar и string. По умолчанию используется %Y-%m-%d %H:%i:%s. Описание конкретных форматов см. в разделе date-format

Возвращаемое значение​

Возвращает дату в указанном формате в виде значения типа VARCHAR. Результат представляет собой преобразование временной метки Unix из часового пояса UTC во время текущего часового пояса. Если входное значение содержит дробную часть, результат включает доли секунды (например, 2007-12-01 00:30:19.500000).

  • В настоящее время поддерживается диапазон unix_timestamp [0, 253402271999.999999], соответствующий датам от 1970-01-01 00:00:00 до 9999-12-31 23:59:59.999999. Если unix_timestamp выходит за этот диапазон, возвращается ошибка
  • Если string_format некорректен, возвращается строка, не соответствующая ожидаемому результату.
  • Формат не может одновременно содержать %f и %n, поскольку они используют разную точность округления.
  • Если какой-либо параметр равен NULL, возвращается NULL
  • Если длина формата превышает 128 символов, возвращается ошибка

Примеры​


----Since the current timezone is East 8th zone, the returned time is 8 hours ahead of UTC
select from_unixtime(0);
+---------------------+
| from_unixtime(0) |
+---------------------+
| 1970-01-01 08:00:00 |
+---------------------+

---Default format %Y-%m-%d %H:%i:%s return
mysql> select from_unixtime(1196440219);
+---------------------------+
| from_unixtime(1196440219) |
+---------------------------+
| 2007-12-01 00:30:19 |
+---------------------------+

---Specify yyyy-MM-dd HH:mm:ss format return
mysql> select from_unixtime(1196440219, 'yyyy-MM-dd HH:mm:ss');
+--------------------------------------------------+
| from_unixtime(1196440219, 'yyyy-MM-dd HH:mm:ss') |
+--------------------------------------------------+
| 2007-12-01 00:30:19 |
+--------------------------------------------------+


---Specify %Y-%m-%d date-only format return
mysql> select from_unixtime(1196440219, '%Y-%m-%d');
+-----------------------------------------+
| from_unixtime(1196440219, '%Y-%m-%d') |
+-----------------------------------------+
| 2007-12-01 |
+-----------------------------------------+

---Specify %Y-%m-%d %H:%i:%s format return
mysql> select from_unixtime(1196440219, '%Y-%m-%d %H:%i:%s');
+--------------------------------------------------+
| from_unixtime(1196440219, '%Y-%m-%d %H:%i:%s') |
+--------------------------------------------------+
| 2007-12-01 00:30:19 |
+--------------------------------------------------+

---Exceeds maximum range, returns error
select from_unixtime(253402281999);
ERROR 1105 (HY000): errCode = 2, detailMessage = (10.16.10.3)[INVALID_ARGUMENT]Operation from_unixtime_new of 253402281999, yyyy-MM-dd HH:mm:ss is invalid

---result over max length
select from_unixtime(32536799,repeat('a',129));
ERROR 1105 (HY000): errCode = 2, detailMessage = (10.16.10.3)[INVALID_ARGUMENT]Operation from_unixtime_new of invalid or oversized format is invalid

---string-format does not reference any time values
mysql> select from_unixtime(32536799,"gdaskpdp");
+------------------------------------+
| from_unixtime(32536799,"gdaskpdp") |
+------------------------------------+
| gdaskpdp |
+------------------------------------+

---Fractional timestamp input, result includes sub-second precision
mysql> select from_unixtime(1196440219.5);
+-----------------------------+
| from_unixtime(1196440219.5) |
+-----------------------------+
| 2007-12-01 00:30:19.500000 |
+-----------------------------+

---Fractional timestamp with microsecond precision
mysql> select from_unixtime(1196440219.123456);
+----------------------------------+
| from_unixtime(1196440219.123456) |
+----------------------------------+
| 2007-12-01 00:30:19.123456 |
+----------------------------------+

---Use %f format specifier to display microseconds explicitly
mysql> select from_unixtime(1196440219.123456, '%Y-%m-%d %H:%i:%s.%f');
+----------------------------------------------------------+
| from_unixtime(1196440219.123456, '%Y-%m-%d %H:%i:%s.%f') |
+----------------------------------------------------------+
| 2007-12-01 00:30:19.123456 |
+----------------------------------------------------------+

---Use %n to preserve nanoseconds
mysql> select from_unixtime(1196440219.123456789, '%Y-%m-%d %H:%i:%s.%n');
+-------------------------------------------------------------+
| from_unixtime(1196440219.123456789, '%Y-%m-%d %H:%i:%s.%n') |
+-------------------------------------------------------------+
| 2007-12-01 00:30:19.123456789 |
+-------------------------------------------------------------+

---Input is NULL, returns NULL
mysql> select from_unixtime(NULL);
+---------------------+
| from_unixtime(NULL) |
+---------------------+
| NULL |
+---------------------+