Sql server 2008 SQL Server中的ORDERBY子句
最近我正在处理一个select查询,其中我想根据存储在不同列中的最新日期和时间对行进行排序。客户要求时间是定制的,所以我不能同时使用Sql server 2008 SQL Server中的ORDERBY子句,sql-server-2008,datetime,sql-order-by,Sql Server 2008,Datetime,Sql Order By,最近我正在处理一个select查询,其中我想根据存储在不同列中的最新日期和时间对行进行排序。客户要求时间是定制的,所以我不能同时使用DateTime 现在我有两个问题: 直到我按照ORDERBY子句进行更改,它才开始排序。我最初的订单条款是: ORDER BY PublishDate, PublishTime DESC 上面的查询工作正常,但只对PublishDate进行排序,而对PublishTime不做任何处理,我知道它将主要基于PublishDate进行排序,并将优先考虑PublishT
DateTime
现在我有两个问题:
ORDER BY PublishDate, PublishTime DESC
上面的查询工作正常,但只对PublishDate
进行排序,而对PublishTime
不做任何处理,我知道它将主要基于PublishDate
进行排序,并将优先考虑PublishTime
,但是在上面的查询中,它没有优先选择PublishTime
,但是当我将ORDERBY子句更改为以下时,它工作得很好:
ORDER BY PublishDate DESC, PublishTime DESC
有人能告诉我这两个问题的区别吗?为什么不同时优先选择PublishDate
和PublishTime
DateTime
列,例如,如果用户在2012年3月31日添加了一行,并输入了4:00PM
,是否可以将自定义时间添加到使用GETDATE()检索的当前日期
ORDERBY子句中的默认排序是ASC。所以,如果您不指定,SQL Server将保留在ASC中。你真的在比较
Order By PublishDate ASC, PublishTime DESC
到
这就是为什么第二个会给你你想要的 前一个子句按
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
正如其他人提到的,order by的默认排序是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
这些列使用哪些数据类型?日期时间列中已经有时间。你把PublishDate定为约会还是约会时间?日期:选择publishDate+“”+publishTime日期时间:选择强制转换(强制转换(publishDate为日期)为varchar)+“”+publishTime
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