2012-02-12 6 views
3

SQLiteに日付のデータ型がありません。SQLiteにDATEデータ型がありませんか?これを回避するにはどうすればよいですか?

Y-m-d H:i:s(標準のsql datetime形式)のような日付文字列の間で文字列を比較するのに十分であるかどうか疑問に思っていました。

たとえば、...WHERE date < NOW()...。これは特定の状況で失敗するでしょうか?

+0

http://www.sqlite.org/lang_datefunc.html – dierre

+0

しかし、私のクエリがmysqlと互換性があるようにしたい場合は、私は使用できません。 – Alex

+0

ごめんなさい。私は問題が何であったのか分からなかった。私はUnixタイムスタンプを使うだけです。 – dierre

答えて

5

あなたは、次のデータ型をSQLiteので日付を格納することができます

  • TEXTとしてISO8601の文字列( "YYYY-MM-DD HH:MM:SS.SSS")。
  • REALジュリアンの日番号、グリニッジの正午から4714年11月24日の日以降の日数。前向きなグレゴリオ暦によると、
  • INTEGERとしてUnix Time、1970-01-01 00:00:00 UTCからの秒数。

これらの偽の日付は、hereという機能を使用して変換できます。

ここでは、関数NOW()についても言及しましたが、これはSQLiteでは機能しません。これはMySQL向けです。これは、使用することをあなたにSQLiteの構文が表示されます:あなたはNOW()を使用していないことを確認し、他の側に、この機能を使うとする

sqlite> select date('now'); 
2012-02-12 
sqlite> select date('now') = date('2012-02-12'); 
1 
sqlite> select date('now') = date('2012-02-11'); 
0 

だから、それは強くお勧めします。

+0

UNIX時間を根付かせる – dierre

1

私は、特定の状況では失敗するとは確信しています。 より速い方法は、time()値(またはmktime())を保存し、time()に基づいてクエリを生成することです。

これはMySQLでも動作します。

2

個人的には、日付には未署名のINTとUnixのタイムスタンプを使用します。日付を整数として比較するのは非常に簡単で効率的です。PHPにはこれらの日付を人間が読めるようにするための数多くの関数があります。

http://php.net/manual/en/function.date.php

3
ロジャー

から引用

SQLiteはdatetime typesを捧げていませんが、few datetime functionsを持っていません。文字列の(実際には 形式のみ)を理解して(文字列に の値を格納して)、それを使用して文字列の辞書式比較 を実行してください 日付を時間または日付時刻と比較しようとしないでください。 は意味がありません)。

使用する言語によっては、automatic conversionを取得することもできます。 SQLiteのは、どのような手段を知らないので、now()を使用して(どの 例のようなSQL文での比較には適用されませんが、あなたの人生が容易になります。)

2

は動作しません。 SQLiteは、しかし、知っているん何current_timestamp手段とthat has the desired format

CURRENT_TIMESTAMPの形式は "YYYY-MM-DD HH:MM:SS" です。 MySQLでは

current_timestampnow() and that also has the desired formatの同義語です:

'YYYY-MM-DD HH:MM:SS'の値として現在の日付と時刻を返します

だから彼らの両方がISO-8601タイムスタンプ形式を使用して、ちょうど任意のデータベースについて、それが良いとポータブルな選択であるように、非常に簡単にISO-8601文字列の間にタイムスタンプに変換することができるようになります。

関連する問題