sqliteには日付型が無かったと記憶しています。とりあえずPowerShell側でDateTime型を文字列に変換してsqliteのレコードに追加、参照してみたいと思います。
サンプルスクリプト
<#
.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型を書式をつけて文字列をコンソールに出力。
感想
試してみて思ったのですが、日付の範囲指定等を考えると文字列ではなく数値で扱ったほうが良い感じがします。
コメント