0

「2012-03-27T03:03:00」のような形式で、単純な varchar として時間を格納するテーブルがあります。

このデータで mysql の日付関数を使用したいと思います。一部の機能は正常に動作します。

mysql> select year('2012-03-14T11:28:32'), month('2012-03-14T11:28:32');
+-----------------------------+------------------------------+
| year('2012-03-14T11:28:32') | month('2012-03-14T11:28:32') |
+-----------------------------+------------------------------+
|                        2012 |                            3 |
+-----------------------------+------------------------------+
1 row in set (0.00 sec)

しかし、時間と分の関数は失敗します:

mysql> select hour('2012-03-14T11:28:32'), minute('2012-03-14T11:28:32');
+-----------------------------+-------------------------------+
| hour('2012-03-14T11:28:32') | minute('2012-03-14T11:28:32') |
+-----------------------------+-------------------------------+
|                           0 |                            20 |
+-----------------------------+-------------------------------+
1 row in set, 2 warnings (0.00 sec)

私の日付形式の「T」がmysqlを台無しにしていると思います。手動でスペースに置き換えると、関数が機能します。

mysql> select hour('2012-03-14 11:28:32'), minute('2012-03-14 11:28:32');
+-----------------------------+-------------------------------+
| hour('2012-03-14 11:28:32') | minute('2012-03-14 11:28:32') |
+-----------------------------+-------------------------------+
|                          11 |                            28 |
+-----------------------------+-------------------------------+
1 row in set (0.00 sec)

「T」を解析するようにmysqlに指示できる簡単な方法はありますか???

4

2 に答える 2

0

これらのMySQLの日付と時刻の関数(HOURたとえば)には、タイムスタンプの特定の部分が必要です。

TIMEしたがって、を使用しDATEて、渡されたタイムスタンプからそれぞれ時刻と日付を抽出する必要があります。

時間を抽出する:

select hour(time('2012-03-14T11:28:32')), minute(time('2012-03-14T11:28:32'));

日付の抽出:

select year(date('2012-03-14T11:28:32')), month(date('2012-03-14T11:28:32'));
于 2012-06-14T23:03:52.403 に答える
0
 SELECT HOUR(STR_TO_DATE('2012-03-14T11:28:32','%Y-%m-%dT%k:%i:%s'))

STR_TO_DATE は、このうるう年以外の項目のような不要な日付に対して NULL を返すことについてはかなり優れています。

 SELECT STR_TO_DATE('2011-02-29T11:28:32','%Y-%m-%dT%k:%i:%s')

また、次のようなこともできます

 SELECT STR_TO_DATE('2011-02-28T11:28:32','%Y-%m-%dT%k:%i:%s') + INTERVAL 1 QUARTER

また

 SELECT STR_TO_DATE('2011-02-28T11:28:32','%Y-%m-%dT%k:%i:%s') - INTERVAL 35 MINUTE

すべてが正しく機能するようにします。

変換指定子についてはこちらをご覧ください。

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format

于 2012-06-14T23:04:26.600 に答える