我试图执行以下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年获得了具有价值的结果。请帮帮我
谢谢
由于您没有提及任何错误(如果START_DATE和END_DATE是DATETIME数据类型),因此查询没有任何问题。如果您没有获得正确的记录,请检查数据。
START_DATE
END_DATE
DATETIME
但是你的date format may trouble you in a different server。您可以遵循一些好的做法来避免此类问题。
date format may trouble you in a different server
-每当将日期用作字符串时,请尝试以 ISO或ISO8601 格式使用它(即 ‘yyyymmdd’ 或 ‘yyyy-mm- ddThh:mi:ss.mmm’ ) -还要避免将表与旧的过时的 WHERE Table1,Table2 连接。JOIN的执行效果更好,更整洁。
-每当将日期用作字符串时,请尝试以 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