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 回答