2010-11-15 3 views
8

Я хотел бы получить записи в определенные даты после d/mm/yyyy или после d/mm/yyyy и до d/mm/yyyy, как я могу это сделать?Выберите запрос с условием даты

SELECT date 
FROM table 
WHERE date > 1/09/2008; 

и

SELECT date 
FROM table 
WHERE date > 1/09/2008; 
AND date < 1/09/2010 

Это не работает.

ответ

21

Будьте осторожны, вы невольно спрашиваете «где дата больше, чем одна, разделенная на девять, разделенная на две тысячи восемь».

Положите # знаки вокруг даты, как этот #1/09/2008#

+0

нормально теперь его работает, большое спасибо –

+0

Приятно видеть людей в очередной раз поставив -1 на правильный ответ, и без добавления комментария, чтобы объяснить, почему – smirkingman

+1

-1. Этот способ выполнения зависит от формата даты по умолчанию: dd/mm/yyyy. В другом ответе используется формат даты ISO. ОП задал вопрос «как мне это сделать» не просто «почему мой sql возвращает неправильный ответ» – Colin

8

точка с запятой используется символ для завершения оператора SQL.

Вы можете использовать знаки # в отношении значения даты или использовать функции доступа (ACE, Jet, whatever), отличные от DATETIME, функции CDATE(). Как следует из его названия, DATETIME всегда включает элемент времени, поэтому ваши литературные значения должны отражать этот факт. Формат даты ISO отлично понимается движком SQL.

Лучше не использовать BETWEEN для DATETIME в Access: это моделируется с помощью типа с плавающей точкой и в любом случае время континуум;)

DATE и TABLE являются зарезервированными словами в стандартах SQL, ODBC и Jet 4.0 (и вероятно, за пределами), поэтому лучше всего избегать имени элементов данных:

Ваши предикаты предлагают открытое представление периодов (где ни дата начала, ни дата окончания не включены в период), что, возможно, является наименее популярным выбором , Это заставляет меня задаться вопросом, если вы имели в виду использовать закрытое открытое представление (где ни дата ее начала включается, но период заканчивается непосредственно перед датой окончания):

SELECT my_date 
    FROM MyTable 
WHERE my_date >= #2008-09-01 00:00:00# 
     AND my_date < #2010-09-01 00:00:00#; 

В качестве альтернативы:

SELECT my_date 
    FROM MyTable 
WHERE my_date >= CDate('2008-09-01 00:00:00') 
     AND my_date < CDate('2010-09-01 00:00:00'); 
+0

Я не понимаю, почему вы рекомендуете против МЕЖДУ датами. Да, вы должны признать, что ваши результаты могут быть не такими ожидаемыми, если вы не учитываете компонент времени, но это не является недостатком BETWEEN, но простая ошибка пилота из-за непонятности хранения ваших данных. –

+0

@ David-W-Fenton: природа хранилища с плавающей запятой (о котором этот пилот полностью осведомлен) означает, что единственный способ использования «BETWEEN» с Access (ACE, Jet, любой) - всегда округлять значения до ваш желаемый уровень точности (один день, одна секунда и т. д., но точность второй секунды сложна ...), но пользователи используют 'NOW()' в своих запросах, поэтому вам нужно отменить привилегии из базовых таблиц и выставить требуемые используя хранимые процедуры с параметрами DATETIME, которые вы можете объединить ... все это становится слишком большим. – onedaywhen

+0

@ David-W-Fenton: «Да, вы должны признать, что ваши результаты могут быть не такими, как ожидалось» - все поддерживаемые приложения требуют, чтобы все результаты были такими, как ожидалось. Не твой ...? – onedaywhen

1
select Qty, vajan, Rate,Amt,nhamali,ncommission,ntolai from SalesDtl,SalesMSt where SalesDtl.PurEntryNo=1 and SalesMST.SaleDate= (22/03/2014) and SalesMST.SaleNo= SalesDtl.SaleNo; 

Это должно сработать.

+4

hmmm ... редактирование изменило комментарий ниже кода от «не работает» до «работы» - совсем наоборот, не так ли? Итак, каково ваше намерение, ответьте (как сейчас) или вопрос (как и до редактирования)? – kleopatra

-1

эй, ребята, я думаю, что вы ищете именно этот, используя команду select. При этом вы можете указать диапазон больше (>) или меньше (<) В MySQL С ЭТИМ :::::

select* from <**TABLE NAME**> where year(**COLUMN NAME**) > **DATE** OR YEAR(COLUMN NAME)< **DATE**; 

НАПРИМЕР:

select name, BIRTH from pet1 where year(birth)> 1996 OR YEAR(BIRTH)< 1989; 
+----------+------------+ 
| name  | BIRTH  | 
+----------+------------+ 
| bowser | 1979-09-11 | 
| chirpy | 1998-09-11 | 
| whistler | 1999-09-09 | 
+----------+------------+ 

ДЛЯ ПРОСТОЙ RANGE LIKE ИСПОЛЬЗОВАНИЯ ТОЛЬКО ПРЕВЫШАЕТ/меньше, чем

MySQL> выберите окнеИМЯстолбец из < ИмяТаблицы> где год (ИМЯ КОЛОННЫ)> 1996;

НАПРИМЕР MySQL>

select name from pet1 where year(birth)> 1996 OR YEAR(BIRTH)< 1989; 
+----------+ 
| name  | 
+----------+ 
| bowser | 
| chirpy | 
| whistler | 
+----------+ 
3 rows in set (0.00 sec) 
Смежные вопросы