2016-05-16 4 views
10

Я пытаюсь получить часть даты из поля timestamp. Я использовал этот SQL-запрос:Почему функция CAST() возвращает неверную дату?

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.

Как решить эту проблему?

ответ

5

дата использования не отбрасывать, потому что не кастинг, но формат

select timestamp, date(timestamp) as my_date from messages 
+0

Великий ответ. Спасибо, что это сработало, как шарм. Но функция DATE_FORMAT() также создает неправильный формат. Почему это? – user2899728

+2

Дата() извлекает часть даты действительного даты и времени ,,, Date_format изменит аспект даты ... какой формат вы используете ..? – scaisEdge

+0

Я использовал '% d% M,% Y' – user2899728

0

Попробуйте

select timestamp, cast(timestamp as date format 'yyyymmddhhmmss') as date from messages 
+0

Ошибка SQL: # 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования около 'format' yyyymmddhhmmss ') в качестве даты из сообщений LIMIT 0, 25' в строке 1 – user2899728

5

Я хотел бы предложить вам использовать функцию date_format, а не CAST, так как вы форматирования даты например

SELECT `timestamp`, DATE_FORMAT(`timestamp`, '%Y-%m-%d) as my_date from messages 

Также обратите внимание, что как функция CAST, так и DATE внутренне вызывают пункт _date_typecast, поэтому между ними нет такой разницы.

7

Это не проблема !!! Его единственный установлен неверный 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]> 
Смежные вопросы