SQLiteデータベースに日時値を挿入するにはどうすればよいですか?


109

SQLiteデータベースに日時値を挿入しようとしています。それは成功しているようですが、値を取得しようとするとエラーが発生します。

<データを読み取れません>

SQLステートメントは次のとおりです。

create table myTable (name varchar(25), myDate DATETIME)
insert into myTable (name,mydate) Values ('fred','jan 1 2009 13:22:15')

回答:


153

必要な形式は次のとおりです。

'2007-01-01 10:00:00'

つまり、yyyy-MM-dd HH:mm:ss

ただし、可能であれば、パラメータ化されたクエリを使用してください。これにより、フォーマットの詳細について心配する必要がなくなります。


このような文字列を使用して日付で注文するにはどうすればよいですか?
IgorGanapolsky 2013

3
このように日付をフォーマットすると、日付の順序と字句の順序は同じように機能します。たとえば、「2008-02-01」>「2007-02-01」、「2008-01-02」>「2008-01-01」は、文字列と日付の両方です。ただし、SQLiteのORDER BYが順序付けを処理するため、厳密にこれを気にする必要はありません。
itowlson 2013

7
「SELECT '2007-01-02 10:00:00'> '2007-01-02 10:00';」のように、字句順序を使用して異なる精度で日付を確実に比較することはできません。1を返しますが、「SELECT datetime( '2007-01-02 10:00:00')> datetime( '2007-01-02 10:00');」を返します。
シェーン

@itowlson多言語アプリケーションがある場合、これはどのように機能しますか?
batmaci 2017年

46

SQLiteに日付を格納する方法は次のとおりです。

 yyyy-mm-dd hh:mm:ss.xxxxxx

SQLiteには、使用できる日付および時刻関数もいくつかあります。SQLのSQLite、日付と時刻関数で理解されているSQLを参照してください。


3
.xxxxxx参考までに、ここ@TorValamoの構文.SSSでは、SQLiteドキュメントの= =%f、つまり小数秒。
Flak DiNenno 2013

2
DateTime.parse( '2016-05-28 14:27:00 -0300')。strftime( '%Y-%m-%d%H:%M:%S')
rodvlopes

17

STRFTIME関数を使用して日付文字列を挿入できるようにするには、指定する日付文字列の形式を変更する必要があります。理由として、月の省略形はありません。

%d  day of month: 00
%f  fractional seconds: SS.SSS
%H  hour: 00-24
%j  day of year: 001-366
%J  Julian day number
%m  month: 01-12
%M  minute: 00-59
%s  seconds since 1970-01-01
%S  seconds: 00-59
%w  day of week 0-6 with sunday==0
%W  week of year: 00-53
%Y  year: 0000-9999
%%  % 

もう1つの方法は、日付/時刻を既に受け入れられている形式にフォーマットすることです。

  1. YYYY-MM-DD
  2. YYYY-MM-DD HH:MM
  3. YYYY-MM-DD HH:MM:SS
  4. YYYY-MM-DD HH:MM:SS.SSS
  5. YYYY-MM-DDTHH:MM
  6. YYYY-MM-DDTHH:MM:SS
  7. YYYY-MM-DDTHH:MM:SS.SSS
  8. HH:MM
  9. HH:MM:SS
  10. HH:MM:SS.SSS

リファレンス:SQLiteの日付と時刻関数


表には記載されていませんが、ドキュメントには「Z」や「-0400」などのオフセットを追加できると記載されています
coolaj86

10

CURRENT_TIMESTAMPOF NOW()(MySQL)ではなく、必要なときに使用します。


1
これはうまくいきましたが、一つ間違っています。CURRENT_TIMESTAMPはUTCなしでdatetimeを返します。この問題を解決する方法を知っていますか。前もって感謝します!
Ulug'bek Ro'zimboyev

8

これをお読みください:Date日付と時刻を格納するための1.2 およびTimeデータ型の最適なデータ型は次のとおりです。

TEXT 最適な形式は次のとおりです。 yyyy-MM-dd HH:mm:ss

次に、このページを読みます。これは、の日付と時刻について説明するのに最適SQLiteです。これがお役に立てば幸いです



0

これは最も一般的または効率的な方法ではないかもしれませんが、SQLiteの強力なデータ型はいずれにしても基本的にすべて文字列としてダンプされるため、忘れがちです。

SQLiteライブラリの周りにC#ラッパーを作成しました(もちろん、C#でSQLiteを使用している場合)。SQLiteとの間の挿入と抽出を、DateTimeオブジェクトを扱っているかのように処理します。


たとえば、そのフィールドでソートしたい場合は、日付を切り捨てません。あなたは文字列の比較をして
しまい
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.