2013-09-24 3 views
2

Я использую Access для базы данных, и мне нужно написать SQL-запросы для отображения информации. Я не могу понять, как отображать то, что мне нужно.Функция даты в SQL?

На английском языке мне нужен запрос для отображения описания с датой истечения срока действия, когда дата истечения срока действия составляет менее тридцати дней с текущей даты.

Мои знания SQL ограничены. Если бы кто-нибудь мог указать мне на конкретные ресурсы, это было бы очень полезно. Заранее спасибо.

Вот что у меня есть:

SELECT Description, [Expiration Date] 
FROM Hardware 
WHERE [Expiration Date] = "(GET DATE()"; 
+0

от короткого изучения этого вопроса я бы угадал, что это просто 'Date()' http://support.microsoft.com/kb/210604/en-us – DrCopyPaste

ответ

1

Вы можете использовать функции NOW() и DATE(), чтобы получить текущую дату.

Чтобы добавить дни до даты, используйте функцию DATEADD.

WHERE DATEADD(d, 30, [Expiration Date]) >= DATE() 
0

это:

SELECT Description, [Expiration Date] 
FROM Hardware 
WHERE DATEDIFF([Expiration Date], NOW()) < 30; 

или это:

SELECT Description, [Expiration Date] 
FROM Hardware 
WHERE [Expiration Date] < DATE_ADD(NOW(),INTERVAL 30 DAY); 

должен работать.

1
SELECT [Description], [Expiration Date] 
FROM Hardware 
WHERE DateDiff('d', [Expiration Date], Date()) < 30; 

Примечание Description является reserved word. Я заключил его в квадратные скобки, чтобы избежать путаницы с двигателем.

Кроме того, выражение DateDiff учитывает только количество изменений дня. То есть #2013-9-23 23:00# - #2013-9-24 01:00# будет считаться 1 день. Если это не то, что вы хотите, вы можете выполнить арифметику дат непосредственно по значениям Дата/Время.

SELECT [Description], [Expiration Date] 
FROM Hardware 
WHERE (Date() - [Expiration Date]) < 30; 

Если Hardware огромная таблица с индексом на [Expiration Date], вы можете получить более высокую производительность запроса, который поддерживает индексированную выборку, а не рассматривая каждую строку таблицы.

SELECT [Description], [Expiration Date] 
FROM Hardware 
WHERE [Expiration Date] > (Date() - 30); 
Смежные вопросы