2016-05-16 4 views
10

タイムスタンプフィールドから日付部分を取得しようとしています。私は次のような結果だなぜCAST()関数は間違った日付を返しますか?

select timestamp, CAST(timestamp as date) as date from messages 

: 私は、このSQLクエリを使用上記のように

-------------------------------------------- 
|  timestamp  |  date  | 
-------------------------------------------- 
| 2016-05-15 10:22:54 | 2016-05-16 | 
-------------------------------------------- 

を元の日付が2016-05-15であるのに対し、生産日付フィールドは、間違った日付2016-05-16を返します。

どうすればこの問題を解決できますか?キャストされていないため、

答えて

5

利用日はキャストではないが、あなたは、日付の書式を設定しているので、フォーマット

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

グレート答えを参照してください。ありがとうございました。 しかし、DATE_FORMAT()関数も間違った形式を生成します。何故ですか? – user2899728

+2

Date()有効なdatetimeの日付部分を抽出します。,,, 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' – user2899728

5

これはDATE_FORMAT機能ではなくCASTを使用してみてくださいlike

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

また、CAST関数とDATE関数の両方が内部的にItem _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]> 
関連する問題