2012-03-26 3 views
4

Недавно я работал над одним из запросов select, в котором я хотел сортировать строки на основе последних дат и времени, которые хранятся в разных столбцах. Требование клиента заключалось в том, что время будет обычным, поэтому я не могу использовать DateTime вместе.ORDER BY предложение в SQL Server

Теперь у меня есть 2 вопроса:

  1. Это не разбирала, пока я не сделал изменения в порядке п. мой первоначальный заказ пункт был:

    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

Каких данных вы используете для этих колонок? –

+0

Колонки Datetime уже имеют время внутри них. Вы сделали PublishDate Date или DateTime? Дата: выбрать publishDate + '' + publishTime DateTime: выберите cast (cast (publishDate as Date) как varchar) + '' + publishTime –

ответ

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

Сортировка по умолчанию в порядке заказа по 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 
типов
Смежные вопросы