時,分,秒を[年月日時分秒]から取り出す(MySQL,hour,minute,second,extract,date_format)

この記事は約4分で読めます。
スポンサーリンク

あるテーブルの列(カラム)`reg_time`には、年月日時分秒Y-m-d H:i:s形式で格納されているとする。

Y-m-d H:i:s形式 = 2014-01-01 12:34:56

このテーブルから、時と分と秒を取り出すとすると、

① SELECT `reg_time` , hour(`reg_time`) AS `hour` , minute(`reg_time`) AS `minute` , second(`reg_time`) AS `second` FROM `テーブル名`…

で取り出すことができる(1桁のものは何れも1桁で返ってくる)。

SELECT `reg_time` , hour(`reg_time`) AS `hour` , minute(`reg_time`) AS `minute` , second(`reg_time`) AS `second` FROM `テーブル名`...

が、本来、hour,minute,secondは時刻を与えた場合に、各々を返すはず。

・hour(’12:34:56′) → 12
・minute(’12:34:56′) → 34
・second(’12:34:56′) → 56

よって本来は、

② SELECT `reg_time` , hour(time(`reg_time`)) AS `hour` , minute(time(`reg_time`)) AS `minute` , second(time(`reg_time`)) AS `second` FROM `テーブル名`…

として、日付/時刻関数のtimeを使い、一旦reg_timeを時分秒のみにしてから、hour,minute,secondするべきである。

・time(‘2014-01-01 12:34:56’) → 12:34:56

時分秒のみにせずに投げても、機転を利かせてくれて?①で取り出せるのは、MySQLのみ?

なお、これらはdate_formatと書式指定子で取り出すことも可能である。

・date_format(‘年月日時分秒’,’書式指定子’)

・date_format(‘2014-01-01 12:34:56′,’%k’) → 12
・date_format(‘2014-01-01 12:34:56′,’%i’) → 34
・date_format(‘2014-01-01 12:34:56′,’%s’) → 56

同様に、extractとタイプで取り出すことも可能である。

・extract(タイプ from ‘年月日時分秒’)

・extract(hour from ‘2014-01-01 12:34:56’) → 12
・extract(minute from ‘2014-01-01 12:34:56’) → 34
・extract(second from ‘2014-01-01 12:34:56’) → 56

③ SELECT `reg_time` , extract(hour from `reg_time`) AS `hour` , extract(minute from `reg_time`) AS `minute` , extract(second from `reg_time`) AS `second` FROM `テーブル名`…

date_formatでは細かく取り出せるが、書式指定子を忘れてしまうので、カンタンな取り出しであればextractが適?

注意点は、extractにはfromが必要であり、内部の並びがdate_formatとは逆なことかな。

なお、年月日(2023-09-01)、年、月、日、時間(12:34:56)のみを返すような以下もある。

・SELECT DATE(‘2023-09-01 12:34:56’) ;// 2023-09-01
・SELECT YEAR(‘2023-09-01 12:34:56’) ;// 2023
・SELECT MONTH(‘2023-09-01 12:34:56’) ;// 9(桁注意)
・SELECT DAY(‘2023-09-01 12:34:56’) ;// 1(桁注意)
・SELECT TIME(‘2023-09-01 12:34:56’) ;// 12:34:56

関連:MySQLとMariaDBのインデックスの使い方の違い

タイトルとURLをコピーしました