同等のクエリを書く方法はありますか
select * from log_table where dt >= 'nov-27-2009' and dt < 'nov-28-2009';
ただし、日付を 1 つだけ指定して、次の日までその日全体の結果が必要だと言うことができます。
私はこれを作っているだけですが、次のような形です:
select * from log_table where dt = 'nov-27-2009':+1;
すべての RDBMS に移植可能な 1 つの方法があるとは思いません。
私の参考文献 ( SQL Cookbook ) を確認すると、どの RDBMS もまったく同じ方法で問題を解決していないことがわかります。その本の第 8 章をチェックすることをお勧めします。この章では、DB2、Oracle、PostgreSQL、MySQL のさまざまな方法をすべてカバーしています。
ただし、 SQLiteでこの問題に対処する必要がありましたが、SQL クックブックではその RDBMS に対処していないため、ここで少し触れておきます。 SQLite には日付/時刻データ型がありません。すべての日付/時刻データを次のように保存して独自のものを作成TEXT
し、アプリケーションがそのフォーマットを強制するようにする必要があります。SQLite には、データを文字列として維持しながら名目上の日付/時刻を追加できる一連の日付/時刻変換関数があります。2 つの期間 (HH:MM:SS) を互いに加算する必要がある場合は、日付/時刻データとして扱うテキスト列に保存したデータに基づいて、独自のデータを記述する必要があります。機能(「Defining SQLite User Functions」を検索) を呼び出して、実行時にデータベースにアタッチしますsqlite3_create_function()
。時間値を追加するユーザー関数の例が必要な場合は、お知らせください。
日付部分 (時間は 00:00:00.000) だけを持つ列を用意してから、where 句を追加できます: WHERE dt = '2009-11-27'
MS SQL Server については、DATEPARTを確認してください。
/* dy = Day of Year */
select * from log_table where datepart(dy, dt) = datepart(dy, '2009-nov-27');
SQL Server を使用すると、
Select * From table
Where dt >= DateAdd(day, DateDiff(day, 0, @ParamDate), 0)
And dt < DateAdd(day, DateDiff(day, 0, @ParamDate), 1)
それぞれのデータ型の日付データ型を扱っている限り、次のことが機能します。
t.date_column + 1
...指定された日付に 1 日追加されます。しかし、日付への暗黙的なデータ型変換を可能にするデータベースをまだ見つけていません。
SELECT '12-10-2009' + 1
... SQL Server では失敗します。これは、SQL Server が datetime データ型の列と比較するときに暗黙的な変換のみを実行するためです。したがって、次を使用する必要があります。
SELECT CONVERT(DATETIME, '12-10-2009') + 1
Oracle の場合、TO_DATE
関数を使用する必要があります。MySQL はSTR_TO_DATE
などを使用します。