SQLiteの日付時刻型徹底解説:TEXT、NUMERIC、DATETIME、TIMESTAMP比較

2024-05-22

SQLiteで日付時刻値を格納および取得するには、いくつかの方法があります。ここでは、最も一般的な方法をいくつかご紹介します。

TEXT形式で格納

最も簡単な方法は、日付時刻値をTEXT形式で格納することです。この方法では、文字列として値を格納するため、形式の変換が必要になります。

CREATE TABLE my_table (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  datetime_value TEXT
);

INSERT INTO my_table (datetime_value) VALUES ('2024-05-22 06:03:00');

SELECT datetime_value FROM my_table;

このコードは、my_tableという名前のテーブルを作成し、datetime_valueという名前の列を追加します。この列はTEXT型で、日付時刻値を文字列として格納します。

INSERTステートメントを使用して、テーブルに値を挿入します。このステートメントは、datetime_value列に2024-05-22 06:03:00という値を挿入します。

NUMERIC形式で格納

日付時刻値をNUMERIC形式で格納することもできます。この方法では、値をUNIXタイムスタンプとして格納します。UNIXタイムスタンプは、1970年1月1日0時0分0秒からの経過秒数を表す数値です。

CREATE TABLE my_table (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  datetime_value INTEGER
);

INSERT INTO my_table (datetime_value) VALUES (1653187380);

SELECT datetime_value FROM my_table;

INSERTステートメントを使用して、テーブルに値を挿入します。このステートメントは、datetime_value列に1653187380という値を挿入します。この値は、2024年5月22日06時03分00秒に対応するUNIXタイムスタンプです。

DATETIME形式で格納

日付時刻値をDATETIME形式で格納することもできます。この方法は、値をISO 8601形式で格納します。ISO 8601形式は、日付と時刻を表現するための国際標準です。

CREATE TABLE my_table (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  datetime_value DATETIME
);

INSERT INTO my_table (datetime_value) VALUES ('2024-05-22 06:03:00');

SELECT datetime_value FROM my_table;

TIMESTAMP形式で格納

日付時刻値をTIMESTAMP形式で格納することもできます。この方法は、値をSQLite独自の形式で格納します。TIMESTAMP形式は、DATETIME形式に似ていますが、ミリ秒までの精度が追加されています。

CREATE TABLE my_table (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  datetime_value TIMESTAMP
);

INSERT INTO my_table (datetime_value) VALUES ('2024-05-22 06:03:00.000');

SELECT datetime_value FROM my_table;



SQLiteで日付時刻値を格納および取得するサンプルコード

TEXT形式で格納

import sqlite3

# データベースへの接続
conn = sqlite3.connect('my_database.db')
cursor = conn.cursor()

# テーブルの作成
cursor.execute('''
CREATE TABLE my_table (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  datetime_value TEXT
);
''')

# データの挿入
cursor.execute("INSERT INTO my_table (datetime_value) VALUES ('2024-05-22 06:03:00')")

# データの取得
cursor.execute("SELECT datetime_value FROM my_table")
results = cursor.fetchall()

# 結果の表示
for row in results:
  print(row[0])

# データベースのクローズ
conn.close()

NUMERIC形式で格納

import sqlite3

# データベースへの接続
conn = sqlite3.connect('my_database.db')
cursor = conn.cursor()

# テーブルの作成
cursor.execute('''
CREATE TABLE my_table (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  datetime_value INTEGER
);
''')

# タイムスタンプの取得
import time
timestamp = int(time.time())

# データの挿入
cursor.execute("INSERT INTO my_table (datetime_value) VALUES (?)", (timestamp,))

# データの取得
cursor.execute("SELECT datetime_value FROM my_table")
results = cursor.fetchall()

# 結果の表示
for row in results:
  # UNIXタイムスタンプを日付時刻に変換
  from datetime import datetime
  dt_object = datetime.fromtimestamp(row[0])
  print(dt_object.strftime('%Y-%m-%d %H:%M:%S'))

# データベースのクローズ
conn.close()

DATETIME形式で格納

import sqlite3

# データベースへの接続
conn = sqlite3.connect('my_database.db')
cursor = conn.cursor()

# テーブルの作成
cursor.execute('''
CREATE TABLE my_table (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  datetime_value DATETIME
);
''')

# データの挿入
from datetime import datetime
dt_object = datetime.now()
datetime_value = dt_object.strftime('%Y-%m-%d %H:%M:%S')

cursor.execute("INSERT INTO my_table (datetime_value) VALUES (?)", (datetime_value,))

# データの取得
cursor.execute("SELECT datetime_value FROM my_table")
results = cursor.fetchall()

# 結果の表示
for row in results:
  print(row[0])

# データベースのクローズ
conn.close()

TIMESTAMP形式で格納

import sqlite3

# データベースへの接続
conn = sqlite3.connect('my_database.db')
cursor = conn.cursor()

# テーブルの作成
cursor.execute('''
CREATE TABLE my_table (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  datetime_value TIMESTAMP
);
''')

# データの挿入
from datetime import datetime
dt_object = datetime.now()
datetime_value = dt_object.strftime('%Y-%m-%d %H:%M:%S.%f')

cursor.execute("INSERT INTO my_table (datetime_value) VALUES (?)", (datetime_value,))

# データの取得
cursor.execute("SELECT datetime_value FROM my_table")
results = cursor.fetchall()

# 結果の表示
for row in results:
  print(row[0])

# データベースのクローズ
conn.close()

これらのコード例は、SQLiteで日付時刻値を格納および取得する方法を示しています。

  • 各例では、my_tableという名前のテーブルを作成します。このテーブルには、idという主キー列と、datetime_valueという名前の日付時刻値列が含まれています。
  • 各例では、datetime_value列に異なる形式の日付時刻値を挿入します。
  • 各例では、datetime_value列から値を取得し、コンソールに表示します。

これらの例は、基本的な使用方法を示すものです。SQLiteで日付時刻値を扱う際には、さまざまな方法があります。詳細については、SQLiteのドキュメントを参照してください。

補足

  • 上記のコードは、Python 3.x を使用して記述されています。他のプログラミング言語を使用している場合は、適切なライブラリと



SQLiteで日付時刻値を格納および取得するその他の方法

strftime() 関数を使用して、日付時刻値を任意の形式で文字列に変換することができます。

SELECT strftime('%Y-%m-%d %H:%M:%S', datetime_value) FROM my_table;

このクエリは、my_table テーブルの datetime_value 列のすべての値を、YYYY-MM-DD HH:MM:SS 形式の文字列に変換して返します。

Julian Day Number は、西暦紀元1年1月1日0時0分0秒からの経過日数を表す数値です。日付時刻値を Julian Day Number に変換することで、計算や比較を簡単に行うことができます。

SELECT julianday('2024-05-22 06:03:00')

このクエリは、2024-05-22 06:03:00 という日付時刻値を Julian Day Number に変換して返します。

外部ライブラリを使用する

SQLiteには、日付時刻値を扱うための組み込み関数がありますが、機能が限られています。より多くの機能が必要な場合は、外部ライブラリを使用することができます。

    これらのライブラリは、日付時刻値の形式変換、時差の計算、日付操作など、さまざまな機能を提供しています。

    • 単純に日付時刻値を格納して取得するだけの場合、最も簡単な方法である TEXT 形式を使用するのがよいでしょう。
    • 日付時刻値を形式変換したり、計算したりする必要がある場合は、strftime() 関数や Julian Day Number を使用する方がよいでしょう。
    • より多くの機能が必要な場合は、外部ライブラリを使用するのがよいでしょう。

      sqlite


      【完全網羅】SQLiteで文字列操作をマスターするためのチュートリアル

      UDF を作成するには、次の手順に従います。SQLite データベースに接続します。次の SQL ステートメントを使用して、UDF を作成します。データベースから切断します。UDF を作成したら、次のように使用することができます。このクエリは、次のような出力を返します。...


      PHPで簡単操作!SQLiteの「最後に挿入されたID」を取得する方法3選

      SQLiteは軽量で使い勝手の良いデータベース管理システムとして人気があります。PHPと組み合わせて使用することで、Webアプリケーションなどの開発に役立ちます。このチュートリアルでは、PHPを使用してSQLiteデータベースにレコードを挿入した後、最後に挿入されたレコードのIDを取得する方法について説明します。...


      SQLiteの整数型: バイト数計算のすべて!サンプルコードで実践

      符号付き整数の場合は、値のバイト数は次の表のとおりです。例次の SQL ステートメントを実行すると、id 列の値のバイト数が表示されます。補足SQLite は、値のサイズを自動的に検出します。そのため、値のバイト数を明示的に指定する必要はありません。...


      Android Room - IN条件付きSELECTクエリの実行方法

      AndroidでSQLiteデータベースを使用する際、Roomライブラリは非常に便利です。Roomは、データベースへのアクセスを簡潔で安全な方法で提供します。このチュートリアルでは、RoomでIN条件付きのSELECTクエリを実行する方法について説明します。...


      SQL SQL SQL SQL Amazon で見る



      PythonでSQLiteデータベースにdatetime値を挿入する

      SQLiteデータベースにdatetime値を挿入するには、いくつかの方法があります。方法文字列として挿入するdatetime値を文字列として挿入するには、以下の形式を使用します。例:CURRENT_TIMESTAMP関数を使用する現在の時刻を挿入するには、CURRENT_TIMESTAMP関数を使用します。