SQLiteでDATETIMEフィールドから時間のみをカンタン抽出!3つの方法を徹底解説

2024-05-13

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 という名前のテーブルを作成し、iddatetime_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


もっと深く理解!SQLiteで最も近い値を取得する3つの方法と選び方

方法 1: ABS() 関数とサブクエリを使用するこの方法は、最も一般的な方法であり、以下の手順で行います。外側クエリ: 検索対象のテーブルと列を指定します。内側クエリ: 外側クエリで選択された各行に対して、ABS() 関数を使用して、検索値との差の絶対値を計算します。...


SQLite ブラウザアプリで Android SQLite データベースを閲覧する

Android Studio の Database Inspector を使用するAndroid Studio には、データベースを閲覧するためのビルトインツールである Database Inspector が用意されています。 これは最も簡単で使いやすい方法の一つですが、閲覧できるデータ量に制限があります。...


データベース操作もラクラクテスト! Android JUnit テストで SQLiteOpenHelper を賢く使う

Android アプリ開発において、SQLiteOpenHelper はデータベース操作を簡略化するための重要なクラスです。一方、JUnit はテスト駆動開発 (TDD) における単体テストの実行に用いられるフレームワークです。このチュートリアルでは、Android JUnit テストを利用して SQLiteOpenHelper を効果的にテストする方法について詳細に解説します。...


Androidで画像をSQLiteに保存する:Roomライブラリ vs. その他の方法

AndroidでSQLiteデータベースに画像を保存するには、いくつかの方法があります。今回は、Roomライブラリを使用して画像を挿入する方法を詳しく説明します。Roomライブラリは、AndroidでSQLiteデータベースを操作するためのライブラリです。複雑なSQLクエリを記述することなく、データベース操作を簡単に行うことができます。...