SQL запрос для выбора недели, месяца, дня - PullRequest
0 голосов
/ 24 февраля 2011

пожалуйста, ребята, мне нужен SQL-запрос, чтобы выбрать данные из базы данных доступа, используя VB6.в запросе будет указана только текущая дата, а в базе данных было сопоставлено поле curr_date.

, например,

SELECT * 
  FROM TABLE 
 WHERE curr_date BETWEEN firstoflastmonth AND endoflasthmonth;

SELECT * 
  FROM TABLE 
 WHERE curr_date BETWEEN firstoflastweek AND endoflasthweek;

SELECT * 
  FROM TABLE 
 WHERE curr_date BETWEEN firstofthismonth AND endofthismonth;

SELECT * 
  FROM TABLE 
 WHERE curr_date BETWEEN firstofthsiweek AND tilldate;

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

Ответы [ 3 ]

2 голосов
/ 24 февраля 2011

Функция Date () возвращает текущую метку времени.Используйте функции даты доступа к ms для работы в обратном / прямом направлении, например:

DateAdd("m",2,Date())

Добавляет два месяца к текущей датеотметьте эту ссылку из

1 голос
/ 24 февраля 2011

Не проще ли просто проверить, в каком месяце / неделе вы хотите, чтобы он был в то время?

Из ваших примеров:

SELECT *    FROM TABLE   
WHERE curr_date BETWEEN firstoflastmonth AND endoflasthmonth;  

Это станет (с использованной функцией month )

SELECT *    FROM TABLE   
WHERE month(curr_date) = month(dateadd("m",-1,Date()));

Это сравнивает месяц вашего curr_date с месяцем Date (текущая дата) минус один месяц, то есть последний месяц. Это также можно сделать, используя datediff :

SELECT *    FROM TABLE   
WHERE DateDiff ( "m", curr_date, date()) = 1
AND curr_date < date();

Последняя строка добавлена, чтобы удостовериться, что даты через месяц не выбраны.

То же самое можно применить к другим запросам, используя найденную функцию даты здесь

Ссылки, использованные для справочного листа, предоставленного Ричардом Калаханом

1 голос
/ 24 февраля 2011

См:

Почему я должен рассмотреть возможность использования вспомогательной календарной таблицы?

Код статьи предназначен специально для SQL Server, но методы являются переносимыми для большинства платформ SQL (и даже для MS Access :). Идея состоит в том, что SQL является декларативным языком и предпочтет решение на основе наборов данных, а не калькуляцию. -процедурный подход.

У вас будет по одной строке на каждый день, необходимый вашему предприятию, охватывая несколько десятилетий, не будет много (тысячи строк). Каждый из этих дней будет иметь значения для firstoflastmonth, firstoflastweek и т. Д. (Обратите внимание, что, однако, tilldate означает); эти значения генерируются один раз, например используя электронную таблицу. Затем вы можете JOIN к этой таблице, используя NOW(), реализацию Access (ACE, Jet, что угодно) Standard SQL CURRENT_TIMESTAMP.

Далее отметим, что поскольку Access использует двойные значения с плавающей запятой для моделирования всех временных данных, операция euality BETWEEN обычно непригодна. Так что вместо этого:

SELECT * 
  FROM TABLE 
 WHERE curr_date BETWEEN firstoflastmonth AND endoflasthmonth;

... вместо этого используйте это

SELECT * 
  FROM TABLE 
 WHERE (
        curr_date >= firstoflastmonth 
        AND curr_date < firstofthishmonth
       );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...