2011-07-31 53 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