2012-03-26 96 views
4

最近我正在處理select查詢之一,其中我想根據存儲在不同列中的最新日期和時間對行進行排序。客戶的要求是時間是自定義的,所以我不能一起使用DateTimeSQL Server中的ORDER BY子句

現在我有2個問題:

  1. 它不是排序,直到我by子句,以便所做的更改。我原來的ORDER BY子句是:

    ORDER BY PublishDate, PublishTime DESC 
    

    上述查詢工作正常,但只排序PublishDate,並與PublishTime無所事事,我明白,這將主要排序PublishDate的基礎上,將給予第二優先PublishTime,但上面的查詢它沒有給予任何偏好PublishTime,但是當我一條一條地改變了以低於它工作得很好:

    ORDER BY PublishDate DESC, PublishTime DESC 
    

    誰能告訴我有什麼之間的區別兩個查詢?爲什麼不都主要優先PublishDate和次要PublishTime

  2. 是否可以自定義時間追加到DateTime專欄中,我的意思是說,例如,如果用戶在31 March 2012添加一行,並進入4:00PM,是可以自定義的時間添加到檢索到的當前日期使用GETDATE()

+0

哪些數據類型您使用的這些列? – 2012-03-26 20:44:55

+0

日期時間列已經有時間了。您是否使PublishDate成爲Date或DateTime? Date:select publishDate +''+ publishTime DateTime:select cast(cast(publishDate as Date)as varchar)+''+ publishTime – 2012-03-29 16:20:51

回答

3

前一條由PublishDate ASC排序(默認方向)。

在這個例子中數據集:

PublishDate PublishTime 
1/1/2012  01:00 
12/1/2011  03:00 
1/1/2012  03:00 
1/1/2012  01:30 
1/3/2012  01:30 
1/5/2012  01:30 

第一子句將產生:

PublishDate PublishTime 
12/1/2011  03:00 
1/1/2012  03:00 
1/1/2012  01:30 
1/1/2012  01:00 
1/3/2012  01:30 
1/5/2012  01:30 

雖然第二子句將產生:

PublishDate PublishTime 
1/5/2012  01:30 
1/3/2012  01:30 
1/1/2012  03:00 
1/1/2012  01:30 
1/1/2012  01:00 
12/1/2011  03:00 
5

order by子句中的默認排序是ASC。所以如果你沒有指定,SQL Server將會保存在ASC中。所以,你真的比較

Order By PublishDate ASC, PublishTime DESC 

Order By PublishDate DESC, PublishTime DESC 

這就是爲什麼第二個是給你想要的東西。

1

作爲其他所提到的,該默認排序爲ASC。

關於第二個問題,試試這個:

declare @newDateTime as datetime 
declare @userTime as time 
set @userTime = '4:00PM' 
select @newDateTime = 
CONVERT(varchar(10), getDate(), 101) +' '+ convert(varchar(8), @userTime,108) 

select @newDateTime --current date + user time entry