タイムスタンプの操作

問合せでタイムスタンプ値を指定するには、その値を文字列として指定し、タイムスタンプ・データ型にキャストします。次に例を示します。

sql-> SELECT id, firstname, lastname FROM Persons WHERE
lastLogin = CAST("2016-10-19T09:18:05.5555" AS TIMESTAMP);
 +----+-----------+----------+
 | id | firstname | lastname |
 +----+-----------+----------+
 |  4 | Peter     | Smith    |
 +----+-----------+----------+

1 row returned 

タイムスタンプの問合せでは、通常、時間の範囲が使用されるため、複数のキャストが必要になります。

sql-> SELECT id, firstname, lastname, lastLogin FROM Persons WHERE 
lastLogin > CAST("2016-11-01" AS TIMESTAMP) AND 
lastLogin < CAST("2016-11-30" AS TIMESTAMP);
 +----+-----------+----------+--------------------------+
 | id | firstname | lastname |        lastLogin         |
 +----+-----------+----------+--------------------------+
 |  3 | John      | Morgan   | 2016-11-29T08:21:35.4971 |
 |  2 | John      | Anderson | 2016-11-28T13:01:11.2088 |
 |  5 | Dana      | Scully   | 2016-11-08T09:16:46.3929 |
 +----+-----------+----------+--------------------------+

3 rows returned 

様々なタイムスタンプ関数を使用して、タイムスタンプ・データから特定の時間と日付の値を戻すこともできます。次に例を示します。

sql-> SELECT id, firstname, lastname, 
    year(lastLogin) AS Year, 
    month(lastLogin) AS Month, 
    day(lastLogin) AS Day, 
    hour(lastLogin) AS Hour, 
    minute(lastLogin) AS Minute 
FROM Persons;
 +----+-----------+----------+------+-------+-----+------+--------+
 | id | firstname | lastname | Year | Month | Day | Hour | Minute |
 +----+-----------+----------+------+-------+-----+------+--------+
 |  3 | John      | Morgan   | 2016 |    11 |  29 |    8 |     21 |
 |  2 | John      | Anderson | 2016 |    11 |  28 |   13 |      1 |
 |  4 | Peter     | Smith    | 2016 |    10 |  19 |    9 |     18 |
 |  5 | Dana      | Scully   | 2016 |    11 |   8 |    9 |     16 |
 |  1 | David     | Morrison | 2016 |    10 |  29 |   18 |     43 |
 +----+-----------+----------+------+-------+-----+------+--------+ 

または、次のようにEXTRACT関数を使用します。

sql-> SELECT id, firstname, lastname, 
    EXTRACT(YEAR FROM lastLogin) AS Year, 
    EXTRACT(MONTH FROM lastLogin) AS Month, 
    EXTRACT(DAY FROM lastLogin) AS Day, 
    EXTRACT(HOUR FROM lastLogin) AS Hour, 
    EXTRACT(MINUTE FROM lastLogin) AS Minute 
FROM Persons;
 +----+-----------+----------+------+-------+-----+------+--------+
 | id | firstname | lastname | Year | Month | Day | Hour | Minute |
 +----+-----------+----------+------+-------+-----+------+--------+
 |  3 | John      | Morgan   | 2016 |    11 |  29 |    8 |     21 |
 |  4 | Peter     | Smith    | 2016 |    10 |  19 |    9 |     18 |
 |  1 | David     | Morrison | 2016 |    10 |  29 |   18 |     43 |
 |  2 | John      | Anderson | 2016 |    11 |  28 |   13 |      1 |
 |  5 | Dana      | Scully   | 2016 |    11 |   8 |    9 |     16 |
 +----+-----------+----------+------+-------+-----+------+--------+

5 rows returned
sql->