根据sql中的日期过滤数据

时间:2013-01-18 11:03:03

标签: sql sql-server sql-server-2008 sql-date-functions sqldatetime

我试图执行以下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年的价值结果。请帮帮我

由于

1 个答案:

答案 0 :(得分:5)

由于您没有提及任何错误,如果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