5

次のSQLクエリを実行し、日付に基づいてデータを除外しようとしています。

上記のstart_dateとend_dateの間にある行のみが表示されるようにデータを除外するテーブルを表示する必要があります

これが私が試しているクエリです

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年の値でも結果が出ています。私を助けてください

ありがとう

4

1 に答える 1

10

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

しかしあなたのdate format may trouble you in a different server。このような問題を回避するために順守できるいくつかの優れた方法があります。

-日付を文字列として使用する場合は、ISOまたはISO8601 形式(つまり、 「yyyymmdd」または「yyyy-mm-ddThh:mi:ss.mmm」)で使用してみてください。

-また、古くて廃止されたWHERE Table1、Table2とテーブルを結合することは避けてください。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
于 2013-01-18T11:28:43.003 に答える