为什么CAST()函数返回错误的日期?

use*_*728 10 mysql sql date

我试图从时间戳字段获取日期部分.我用过这个SQL查询:

select timestamp, CAST(timestamp as date) as date from messages
Run Code Online (Sandbox Code Playgroud)

我得到了以下结果:

--------------------------------------------
|        timestamp        |      date      |
--------------------------------------------
|   2016-05-15 10:22:54   |   2016-05-16   |
--------------------------------------------
Run Code Online (Sandbox Code Playgroud)

如上所示,生成的日期字段返回错误的日期,2016-05-16而原始日期是2016-05-15.

我们如何解决这个问题?

Ber*_*fen 7

那不是问题!!! 它只设置了错误的time_zone.看样品

获取当前time_zone

SHOW GLOBAL VARIABLES LIKE 'time_zone'; -- systemwide setting
SHOW VARIABLES LIKE 'time_zone'; -- session setting
Run Code Online (Sandbox Code Playgroud)

样品

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]>
Run Code Online (Sandbox Code Playgroud)


sca*_*dge 5

使用未投出日期,因为不是投射而是格式

select timestamp, date(timestamp) as my_date from messages
Run Code Online (Sandbox Code Playgroud)

  • Date()提取有效日期时间的日期部分,,, Date_format更改日期的方面...您使用什么格式..? (2认同)
  • 我重复定义"提取日期或日期时间表达式的日期部分",因此给定一个有效的日期时间提取日期部分..no转换,格式或设置时间设置...涉及.. (2认同)

Rah*_*thi 5

我建议您使用DATE_FORMAT函数而不是CAST,因为您要格式化日期

SELECT `timestamp`, DATE_FORMAT(`timestamp`, '%Y-%m-%d) as my_date from messages
Run Code Online (Sandbox Code Playgroud)

另请注意,CAST和DATE函数都在内部调用Item_date_typecast函数,因此它们之间没有这种差异.