2012-03-26 56 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