1. ホーム
  2. sql

[解決済み] SQLで日付に基づいてデータをフィルタリングする

2022-03-08 05:52:10

質問

以下のSQLクエリを実行し、日付に基づいてデータをフィルタリングしようとしています。

指定された開始日と終了日の間にある行だけをフィルタリングするテーブルを表示する必要があります。

以下は、私が試したクエリです。

SELECT DISTINCT T1.column1, T1.column2, T2.START_DATE, T2.END_DATE
FROM Table1 T1, Table2 T2
WHERE (T1.column1= T2.column2) AND
(T2.START_DATE >= '15/01/2013 10:58:58' AND 
   T2.END_DATE <= '18/01/2013 10:58:58') ORDER BY T2.START_DATE DESC

2012年の値でも結果は同じです。よろしくお願いします。

ありがとうございます

解決方法は?

エラーについて言及されていないので、もし START_DATEEND_DATEDATETIME のデータ型であれば、クエリには何も問題はありません。 もし正しいレコードが得られない場合は、データを確認してください。

しかし、あなたの date format may trouble you in a different server . このような問題を回避するために、守るべき良い習慣がいくつかあります。

<ブロッククオート

-日付が文字列として使用される場合は、必ず ISOまたはISO8601 フォーマット(つまり 'yyyymmdd' または 'yyyy-mm-ddThh:mi:ss.mmm' です。 )

-を使ったテーブルの結合も避けてください。 WHERE テーブル1, テーブル2 これは古くて を使用します。JOINの方がはるかに性能がよく、すっきりしています。

以下のようにクエリを変更することができます。

SELECT DISTINCT T1.column1, T1.column2, T2.START_DATE, T2.END_DATE
FROM Table1 T1 JOIN Table2 T2 ON T1.column1 = T2.column2
WHERE (T2.START_DATE >= '20130115 10:58:58' AND 
       T2.END_DATE <= '20130118 10:58:58') 
ORDER BY T2.START_DATE DESC