Sql server 2008 SQL Server中的ORDERBY子句

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

最近我正在处理一个select查询,其中我想根据存储在不同列中的最新日期和时间对行进行排序。客户要求时间是定制的,所以我不能同时使用
DateTime

现在我有两个问题:

  • 直到我按照ORDERBY子句进行更改,它才开始排序。我最初的订单条款是:

    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