2014-10-01 5 views
-1

У меня есть дата, которая выглядит следующим образом: 2014-10-01 12:35:29.440Сравнения дат с помощью SQL

таблица выглядит следующим образом:

ORDER 1 | 2014-07-31 00:00:00.000 

ORDER 2 | 2015-07-31 00:00:00.000 

жаль, что я хотел ORDER 2, чтобы показать вверх .. Как мою дату прибудут возвраты сегодняшних дата и что GREATER чем 2014-07-31 00: 00: 00,000

Вот что я пробовал:

SELECT TOP 1 NAME 
FROM ORDER_DATES 
WHERE GETDATE() > ORDER_DATE 
ORDER BY NAME DESC 
+0

Вы действительно хранящий дату в виде строки символов, а не как дата/время? –

+0

Его сохранено как дата ... – PriceCheaperton

+1

Что означает ваша первая строка? У вашего запроса нет даты в этом формате. –

ответ

1

Ваш вопрос еще не совсем сформулирован таким образом, чтобы это способствовало тому, что вам нужно ... но я думаю, что я понимаю, что вы хотите прямо сейчас на основе комментариев.

на основе комментария:

Если он не соответствует дате, то он должен вернуть следующую строку. Что ORDER 2

Что-то, как это должно работать:

SELECT TOP 1 name 
FROM ORDER_DATES o 
INNER JOIN (
    -- This subquery finds the first date that occurs *after* the current date 
    SELECT MIN(ORDER_DATE) AS ORDER_DATE 
    FROM ORDER_DATES 
    WHERE ORDER_DATE > GETDATE() 
) minDateAfterToday ON o.ORDER_DATE = minDateAfterToday.ORDER_DATE 
ORDER BY name 

Это будет работать гораздо лучше, если бы у вас было поле ID в таблице, но это должен работать с данной информации , вы можете столкнуться с проблемами, если у вас есть два заказа в ту же дату.

EDIT:

вот скрипку показывает запрос в действии:

http://sqlfiddle.com/#!6/f3057/1

0

DATEDIFF придет удобно, и вы должны заказать по ORDER_DATE:

SELECT TOP 1 NAME 
FROM ORDER_DATES 
WHERE DATEDIFF(DAY,ORDER_DATE,GETDATE())>0 
ORDER BY ORDER_DATE DESC 
0

Проверьте, если вы запрашиваете к правой таблице

declare @dt datetime = cast('2014-10-01 12:35:29.440' as datetime), @dt2 datetime= cast('2014-07-31 00:00:00.000' as datetime); 

print(case when @dt > @dt2 then 1 else 0 end); 

Эта часть сценария показывает выход 1, т.е. условие должно соответствовать для заказа 1

Проверьте, не хватает ли вы какой-то вещи.


Edit в соответствии с изменением к исходному вопросу:

здесь условие необходимо будет отменена, как значение даты в будущем, которое больше, чем текущая дата

новый запрос будет как

SELECT TOP 1 NAME 
FROM ORDER_DATES 
WHERE ORDER_DATE > GETDATE() 
ORDER BY NAME DESC 
0

Вы можете написать по адресу:

SELECT NAME 
FROM ORDER_DATES 
WHERE cast(GETDATE()as date) > cast (ORDER_DATE as date) 
ORDER BY NAME DESC 

Demo

Смежные вопросы