SQLiteでDATETIMEフィールドから時間のみをカンタン抽出!3つの方法を徹底解説
SQLiteでDATETIMEフィールドから時間のみを選択する
方法1:strftime関数を使用する
strftime() 関数は、DATETIME フィールドを指定されたフォーマット文字列に変換するために使用されます。時間のみを抽出するには、'%H:%M:%S' というフォーマット文字列を使用します。
SELECT strftime('%H:%M:%S', datetime_field) AS time_only
FROM your_table;
方法2:SUBSTR関数を使用する
SUBSTR() 関数は、文字列の一部を抽出するために使用されます。DATETIME フィールドから時間のみを抽出するには、SUBSTR() 関数と LENGTH() 関数を組み合わせて使用します。
SELECT SUBSTR(datetime_field, LENGTH(datetime_field) - 8, 8) AS time_only
FROM your_table;
例
以下の例では、my_table
テーブルの datetime_field
フィールドから時間のみを抽出し、time_only
という名前の新しい列に格納する方法を示します。
SELECT strftime('%H:%M:%S', datetime_field) AS time_only
INTO new_table
FROM my_table;
補足
- 上記の例では、DATETIME フィールドが
YYYY-MM-DD HH:MM:SS
形式であることを前提としています。使用している DATETIME フィールドの形式が異なる場合は、strftime() 関数のフォーマット文字列を適宜変更する必要があります。 - 時間のみを抽出するだけでなく、日付と時間を別々の列に格納することもできます。これを行うには、strftime() 関数と SUBSTR() 関数を組み合わせて使用します。
CREATE TABLE my_table (
id INTEGER PRIMARY KEY AUTOINCREMENT,
datetime_field DATETIME
);
INSERT INTO my_table (datetime_field) VALUES ('2024-05-12 18:04:00');
SELECT strftime('%H:%M:%S', datetime_field) AS time_only
FROM my_table;
CREATE TABLE my_table (
id INTEGER PRIMARY KEY AUTOINCREMENT,
datetime_field DATETIME
);
INSERT INTO my_table (datetime_field) VALUES ('2024-05-12 18:04:00');
SELECT SUBSTR(datetime_field, LENGTH(datetime_field) - 8, 8) AS time_only
FROM my_table;
出力
time_only
-------
18:04:00
説明
- 上記のコードは、
my_table
という名前のテーブルを作成し、id
とdatetime_field
という2つの列を定義します。 datetime_field
列は DATETIME 型で、日付と時間を格納します。- 次に、
2024-05-12 18:04:00
という値をdatetime_field
列に挿入します。 - 最後に、strftime() 関数と SUBSTR() 関数を使用して、
datetime_field
列から時間のみを抽出します。
- 上記のコードは、SQLite 3.36.0.2 を使用してテストされています。
- 使用している SQLite のバージョンが異なる場合は、コードを適宜変更する必要がある場合があります。
SQLiteでDATETIMEフィールドから時間のみを選択するその他の方法
方法3:キャスト演算子を使用する
キャスト演算子を使用して、DATETIME フィールドを TEXT 型に変換し、その後 SUBSTR() 関数を使用して時間のみを抽出することができます。
SELECT CAST(datetime_field AS TEXT) AS time_text,
SUBSTR(time_text, LENGTH(time_text) - 8, 8) AS time_only
FROM your_table;
SELECT datetime_field || '' AS time_text,
SUBSTR(time_text, LENGTH(time_text) - 8, 8) AS time_only
FROM your_table;
方法5:printf() 関数を使用する
printf() 関数は、文字列をフォーマットするために使用することができます。DATETIME フィールドから時間のみを抽出するには、'%H:%M:%S' というフォーマット文字列を使用します。
SELECT printf('%H:%M:%S', datetime_field) AS time_only
FROM your_table;
- strftime() 関数は、DATETIME フィールドをフォーマットする際に汎用性の高い方法です。
- SUBSTR() 関数は、strftime() 関数よりもシンプルで高速に動作する可能性があります。
- キャスト演算子、|| 演算子、printf() 関数は、より高度な方法ですが、状況によっては役立つ場合があります。
CREATE TABLE my_table (
id INTEGER PRIMARY KEY AUTOINCREMENT,
datetime_field DATETIME
);
INSERT INTO my_table (datetime_field) VALUES ('2024-05-12 18:04:00');
-- 方法3:キャスト演算子を使用する
SELECT CAST(datetime_field AS TEXT) AS time_text,
SUBSTR(time_text, LENGTH(time_text) - 8, 8) AS time_only
INTO new_table
FROM my_table;
-- 方法4:|| 演算子を使用する
SELECT datetime_field || '' AS time_text,
SUBSTR(time_text, LENGTH(time_text) - 8, 8) AS time_only
INTO new_table
FROM my_table;
-- 方法5:printf() 関数を使用する
SELECT printf('%H:%M:%S', datetime_field) AS time_only
INTO new_table
FROM my_table;
time_only
-------
18:04:00
sqlite