90932


sqlite3でミリ秒まで含んだ日付を格納するにはどうすればいいのでしょうか?

[sqlite3のドキュメントの「Time
values」のところ](https://www.sqlite.org/lang_datefunc.html#time_values)に`YYYY-MM-
DD HH:MM:SS.SSS`フォーマットが使えるとあったので使ってみたのですが、ミリ秒までは保持していないようです。

試しに `datetime` 関数を使ってみたところ以下のコードでは `0` が返り、

[code]

    select datetime("2022-09-05 03:21:43.111") > datetime("2022-09-05 03:21:43.005")
    
[/code]

以下のコードだと `1` が返ったので、datetimeを使うと秒単位までしか格納されないようです。

[code]

    select datetime("2022-09-05 03:21:43.111") = datetime("2022-09-05 03:21:43.005")
    
[/code]

ミリ秒単位まで格納するにはどうすればいいでしょうか?


CC BY-SA 4.0
2022-09-04T22:02:42.693
90931
2022-09-05T00:47:05.627
2022-09-05T00:47:05.627
3060
5246
question
sql sqlite
sqlite3でミリ秒まで含んだ日付を格納するには？


[sqliteにはそもそも日時を扱うデータ型が存在しません](https://www.sqlite.org/datatype3.html#date_and_time_datatype)。

ですので、sqliteにおける`datetime()`は（他のエンジンにあるような`datetime`型への型変換関数ではなくて）[書式化関数](https://www.sqlite.org/lang_datefunc.html)で

> The datetime() function returns the date and time as text in their same
> formats: YYYY-MM-DD HH:MM:SS.

とあるようにミリ秒を消した文字列を返します。

ミリ秒を扱いたいのなら、ミリ秒を含んだ文字列で処理しましょう。日時の大小比較も文字列として行われるだけです。

* * *

> sqliteでは日付の大小比較が文字列になるということは、(select * from user where latest_updated <
> '2022-09-05 09:00:00.500')のような日付比較のSQLは実行できないということでしょうか?

`latest_updated` カラム側もミリ秒を含む文字列にすれば、文字列比較できますよね。


CC BY-SA 4.0
2022-09-04T22:22:51.200
90932
2022-09-05T00:35:29.567
2022-09-05T00:35:29.567
4236
4236
90931
answer