sql >> データベース >  >> RDS >> Oracle

2つの日付の間の日付を見つける(ベストプラクティス)

    あなたはベストプラクティスを求めています。以下がベストプラクティスだと思います:

    "Date" >= DATE '2014-04-11' AND "Date" < DATE '2014-04-12' + 1
    

    まず、 DATEの使用に注意してください キーワード。あなたの質問は日付についてです それでも、Oracleが直接サポートしていない日付形式を使用しています。幸い、OracleはANSI標準の DATEをサポートしています。 ISO標準形式のキーワード。

    次に、 +1を追加しました そのため、期間の終わりを確認できます。これは、おそらくコードで確認したいものです。 + 1 なので、パフォーマンスに影響はありません。 は一定です。

    第三に、日付定数には時間要素があります。何も指定されていない場合は、その日の真夜中です。したがって、式:

    "Date" BETWEEN '2014-04-11' AND '2014-04-12'
    

    本当に:

    "Date" >= TIMESTAMP '2014-04-11 00:00:00' AND "Date" <= TIMESTAMP '2014-04-12 00:00:00'
    

    つまり、後日からちょうど1回、真夜中の最初の瞬間が含まれます。これは通常あなたが望むものではありません。 Oracleは、この問題を2つの方法で悪化させます。

    1. 日付 データ型には時間コンポーネントが含まれます。
    2. 日付を表示するデフォルトの方法 値には時間要素はありません。

    したがって、最も安全にするために、次のルールを使用してください。

    • betweenは使用しないでください 日付に。
    • > =を使用する 初デート。
    • ユーザー< 第二に。

    AaronBertrandにはブログがあります まさにこのトピックについて。特にSQLServerに関するものですが、アイデアの多くはOracleに当てはまります。特に、 date Oracleのデータ型には時間が含まれます。



    1. パラメータをpostgre関数に渡し、ExecuteReaderを使用してデータを取得するにはどうすればよいですか?

    2. MySQLで2つの数字の間のシーケンスを選択します

    3. 結合と結合を使用したSQLクエリ

    4. innodb_lock_wait_timeoutタイムアウトを増やす