2011-07-31 52 views
0

我怎么能修改此查询>>> @日期1是一个日期(日期只是没有时间)如何更改SQL查询

SELECT DISTINCT TOP (200) dbo.tb_ShowTime.VenueId, DATEADD(Hour, DATEDIFF(Hour, 0, dbo.tb_ShowTime.StartDateTime), 0) AS StartDateTime 
FROM   tb_ShowTime 
WHERE  (dbo.tb_ShowTime.IsDeleted = 0) AND (dbo.tb_ShowTime.StartDateTime BETWEEN @Date1 AND @Date2) 
UNION 
SELECT DISTINCT TOP (200) dbo.tb_EventSectionTime.VenueId, DATEADD(Hour, DATEDIFF(Hour, 0, dbo.tb_EventSectionTime.EventTime), 0) AS StartDateTime 
FROM   tb_EventSectionTime 
WHERE  (dbo.tb_EventSectionTime.IsDeleted = 0) AND (dbo.tb_EventSectionTime.EventTime BETWEEN @Date1 AND @Date2) 
ORDER BY StartDateTime 
+1

仅供参考:与UNION的DISTINCT是多余的,因为UNION删除重复项。此外,每个200的顶级200是随机的。你需要一个派生表来读取TOP 200..ORDER BY ...在UNION和外部ORDER BY – gbn

+0

之前你是什么意思?一个简单的'EventTime> @ Date1'? >>>在你的问题中意味着什么? – gbn

+0

我读到OP需要更改查询,以便@ Date1是排除时间的日期,假设它当前是'datetime'。 –

回答

1

不确定您正在使用哪个dbms,但在Sybase中,您可以将其转换为字符串,然后返回到datetime,从而丢失时间部分。当然你可以做与别人类似的事情。

convert(datetime,convert(varchar,@Date1,109)) 
0

您可以使用这些功能的
Day(@date1)回天日期中的日期
Month(@date1)回报月份
日期

0

当我来到翻过这个问题我用CAST(@Date1 as DATE)year(@date1)回归年这是在SQL-Server中。它截断时间到00:00:00。 如果您正在使用不同的DBMS,请尝试查找相关引擎的投射功能。

+0

只需添加该数据类型即可在SQL Server 2008中添加,因此在以前的版本中无法使用。 –

+0

我们已经被告知“@ Date1是日期(仅限日期)”。 – gbn