我试图从时间戳字段获取日期部分.我用过这个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.
我们如何解决这个问题?
那不是问题!!! 它只设置了错误的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)
使用未投出日期,因为不是投射而是格式
select timestamp, date(timestamp) as my_date from messages
Run Code Online (Sandbox Code Playgroud)
我建议您使用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函数,因此它们之间没有这种差异.
| 归档时间: |
|
| 查看次数: |
1172 次 |
| 最近记录: |