Эквивалент Getdate () для базы данных Jet / Access. Нужны записи за последний месяц - PullRequest
4 голосов
/ 26 января 2010

Я читал другие вопросы и нашел много примеров, чтобы получить записи за прошлый месяц.Я использую построитель запросов Visual Studio 2008 для извлечения записей из базы данных Access, и при вводе следующего запроса отображается сообщение об ошибке, что функция getdate недопустима:

where [Transaction Date]     
   between dateadd(mm, datediff(mm, 0, dateadd(MM, -1, getdate())), 0)
       and dateadd(ms, -3, dateadd(mm, datediff(mm, 0, dateadd(MM, -1, getdate())) + 1, 0))

Что такое правильный sqlзапрос на извлечение записей за последний месяц из mdb?

У меня есть запрос, но он дает мне записи за этот месяц, и мне просто нужно в прошлом месяце:

  SELECT
   [Product Code], [Description One], [Transaction Number], Quantity, [Sales Value], Cost, [Transaction Date], [Transaction Time], Department, [Type Code], Cashier, [Computer Name], [Customer Code]
  FROM
   [Product History] 
  WHERE
   ([Transaction Date] >= DATEADD('m', - 2, NOW()))

Любая помощьценится.

Ответы [ 4 ]

2 голосов
/ 26 января 2010

Эквивалентом Getdate () в доступе является Now ().

1 голос
/ 26 января 2010

Нулевой день месяца - последний день предыдущего месяца, это работает как в Jet SQL, так и в VBA.

Конец прошлого месяца:

 DateSerial(Year(Date()),Month(Date()),0)

Начало прошлого месяца:

 DateSerial(Year(Date()),Month(Date())-1,1)
1 голос
/ 26 января 2010
WHERE
    DATEDIFF('m', [Transaction Date], DATE()) = 1
1 голос
/ 26 января 2010

Я склонен делать пользовательскую функцию в доступе, чтобы определить начало и конец следующего месяца и другие распространенные даты. Вот пример функции с определением начала следующего месяца и конца следующего месяца

Public Function Common_dates_SQL(strCommon_date As String) As Date
On Error GoTo Error_trap:

Select Case strCommon_date

    Case "Start_Last_Month"
        Common_dates_SQL = Date - ((DateDiff("d", DateValue("01/" & DatePart("m", Date) & "/" & DatePart("yyyy", Date)), Date)) + 1)

    Case "End_Last_Month"
    Common_dates_SQL = (Date - ((DateDiff("d", DateValue("01/" & DatePart("m", Date) & "/" & DatePart("yyyy", Date)), Date)) + 1)) - (DatePart("d", Date - ((DateDiff("d", DateValue("01/" & DatePart("m", Date) & "/" & DatePart("yyyy", Date)), Date)) + 1)) - 1)

End Select
DoCmd.Hourglass False
Exit Function

Error_trap:
DoCmd.Hourglass False
MsgBox "An error happened in sub Common_dates, error description " & Err.Description, vbCritical, "FRapps"

End Function

Полная функция длится намного дольше и включает кварталы / годы и другие вещи, которые мне задают

Затем вы можете использовать эту функцию в своем запросе SQL, как это

SELECT tblFoo.*
FROM tblFoo
WHERE (((Created_date) Between Common_dates_SQL('Start_last_month') And Common_dates_SQL('END_last_month')));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...