我试图执行以下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年的价值结果。请帮帮我
由于
答案 0 :(得分:5)
由于您没有提及任何错误,如果START_DATE
和END_DATE
是DATETIME
数据类型,则您的查询没有任何问题。如果您没有获得正确的记录,请检查数据。
然而你的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