あるテーブルの列(カラム)`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桁で返ってくる)。
が、本来、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