PowerShellでSQLiteの項目に日時を文字列としてセットするサンプル

powershell コンピュータ
powershell
sqliteには日付型が無かったと記憶しています。とりあえずPowerShell側でDateTime型を文字列に変換してsqliteのレコードに追加、参照してみたいと思います。

サンプルスクリプト

ファイル名:sqlite01.ps1

<#
.SYNOPSIS
 SQLiteで日付形式のデータを追加、参照するサンプル

#>

using namespace System.Data.SQLite

Set-StrictMode -Version Latest
$ErrorActionPreference = "STOP"

# モジュールのインポート
Import-Module SQLite

Add-Type -AssemblyName "System.Data.SQLite"

# データベースファイル
$db_path = "H:\ps1\sqlite\sqlite01.db"

# コネクションオブジェクトの生成
$con = [SQLiteConnection]::new() | % {
    $_.ConnectionString = ("Data Source = {0}"-f $db_path)
    $_.Open()
    $_
}

# テーブル作成
$cmd = [SQLiteCommand]::new()
$cmd.Connection = $con
$cmd.CommandText = @"
CREATE TABLE IF NOT EXISTS sample (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    entory TEXT
)
"@
$cmd.ExecuteNonQuery() | Out-Null

# レコードの追加
$now = (Get-Date).ToString("yyyy-MM-dd hh:mm:ss")
$cmd.CommandText = @"
INSERT INTO sample (entory) values ('$now')
"@
$cmd.ExecuteNonQuery() | Out-Null

# レコードの参照
$cmd.CommandText = @"
SELECT entory FROM sample
"@
$rec = $cmd.ExecuteReader()
while ($rec.Read())
{
    $entory = [DateTime]$rec['entory']
    Write-Host $entory.ToString("yyyy年MM月dd日 hh時mm分ss秒")
}
$rec.Close()

$con.Close()

$db_pathはデータベースファイルのPATHですので環境に合わせて変更する。

サンプルスクリプトを実行

結果

2023年04月22日 11時40分07秒

PowerShellのGet-Dateで現在の日時を取得し、SQL文に文字列として埋め込みINSERT。
次にSELECTで取り出した文字列からDateTime型へのキャスト。
DateTime型を書式をつけて文字列をコンソールに出力。

感想

とりあえずsqliteで日付を文字列として扱ってみました。
試してみて思ったのですが、日付の範囲指定等を考えると文字列ではなく数値で扱ったほうが良い感じがします。

コメント