1

同等のクエリを書く方法はありますか

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;
4

5 に答える 5

2

すべての 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()。時間値を追加するユーザー関数の例が必要な場合は、お知らせください。

于 2009-12-01T21:47:13.780 に答える
0

日付部分 (時間は 00:00:00.000) だけを持つ列を用意してから、where 句を追加できます: WHERE dt = '2009-11-27'

于 2009-12-01T23:59:27.043 に答える
0

MS SQL Server については、DATEPARTを確認してください。

/* dy = Day of Year */
select * from log_table where datepart(dy, dt) = datepart(dy, '2009-nov-27');
于 2009-12-01T21:45:17.043 に答える
0

SQL Server を使用すると、

   Select * From table
   Where dt >= DateAdd(day, DateDiff(day, 0, @ParamDate), 0)
      And dt < DateAdd(day, DateDiff(day, 0, @ParamDate), 1)
于 2009-12-01T21:48:55.600 に答える
0

それぞれのデータ型の日付データ型を扱っている限り、次のことが機能します。

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などを使用します。

于 2009-12-01T22:02:12.087 に答える