Ответ 1
Использовать дату, отличную от того, что она не выполняется, но формат
select timestamp, date(timestamp) as my_date from messages
Я пытаюсь получить часть даты из поля timestamp. Я использовал этот SQL-запрос:
select timestamp, CAST(timestamp as date) as date from messages
Я получил следующий результат:
--------------------------------------------
| timestamp | date |
--------------------------------------------
| 2016-05-15 10:22:54 | 2016-05-16 |
--------------------------------------------
Как показано выше, созданное поле даты возвращает неверную дату 2016-05-16
, тогда как исходная дата 2016-05-15
.
Как мы можем решить эту проблему?
Использовать дату, отличную от того, что она не выполняется, но формат
select timestamp, date(timestamp) as my_date from messages
Это не проблема!!! Его единственный установлен неверный time_zone. см. образец
получить текущую time_zone
SHOW GLOBAL VARIABLES LIKE 'time_zone'; -- systemwide setting
SHOW VARIABLES LIKE 'time_zone'; -- session setting
Пример
MariaDB [mysql]> select t, CAST(t as date) FROM groupme LIMIT 1;
+---------------------+-----------------+
| t | CAST(t as date) |
+---------------------+-----------------+
| 2016-05-15 20:22:54 | 2016-05-15 |
+---------------------+-----------------+
1 row in set (0.00 sec)
MariaDB [mysql]> SET time_zone ='-12:00';
Query OK, 0 rows affected (0.00 sec)
MariaDB [mysql]> select t, CAST(t as date) FROM groupme LIMIT 1;
+---------------------+-----------------+
| t | CAST(t as date) |
+---------------------+-----------------+
| 2016-05-14 20:22:54 | 2016-05-14 |
+---------------------+-----------------+
1 row in set (0.00 sec)
MariaDB [mysql]>
Я предлагаю вам использовать функцию DATE_FORMAT, а не CAST, поскольку вы форматируете дату, например
SELECT `timestamp`, DATE_FORMAT(`timestamp`, '%Y-%m-%d) as my_date from messages
Также обратите внимание, что и функция CAST, и DATE внутренне вызывают функцию Item_date_typecast, поэтому между ними нет такой разницы.
Попробуйте это
select timestamp, cast(timestamp as date format 'yyyymmddhhmmss') as date from messages