2014-02-09 4 views
0

Я не могу найти прямой ответ на то, что кажется распространенным сценарием. Недавно я преобразовал db доступа в SQL Server и связал таблицы (odbc). Поскольку даты теперь хранятся как в datetime2 как yyyy-mm-dd hh: mm: ss, у меня не было проблем в VBA, чтобы мои формы записывались в базу данных, например Format (VBA.Date, "yyyy-mm-dd 00 : 00: 00").Функция MS Access Date() и запрос SQL Server

Однако у меня есть несколько простых запросов в Access, которые имели где положение как:

Где Field = Date()

, а также

Где поле между датой() и дата() -7

Каков правильный способ запроса данных из запроса Access на SQL-сервер?

+1

МЕЖДУ аргументы должны быть перечислены от наименьшего к самому большому. [Не, чтобы вы все равно использовали BETWEEN для запросов диапазона] (http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil-have-in- common.aspx). –

ответ

0

Ваш код доступа

Where Field = Date() 

Sql Server

Where Field = CAST(GETDATE() AS DATE) 

Функция GETDATE() получает текущий DateTime.

Дата между сегодня и последние 7 дней

Where Field BETWEEN CAST(DATEADD(DAY, -7, GETDATE()) AS DATE) 
        AND CAST(GETDATE() AS DATE) 

Причина я использовал CAST() функцию, потому что GETDATE() возвращает текущее Datetime что-то вроде этого 2014-02-09 22:09:53.067

теперь, если вы проверяете значения WHERE поле имеет сегодняшнюю дату, это будет только значения where Field = '2014-02-09 22:09:53.067' Не записи, где Дата 2014-02-09, это также займет время, потому что я использовал функцию CAST чтобы избавиться от временной части от функции GETDATE().

SELECT GETDATE() Returns '2014-02-09 22:09:53.067' 

SELECT CAST(GETDATE() AS DATE) Returns '2014-02-09' 

Я установил проблемы с вашим запросом были очень немногие из них: SI предложил бы читать книги онлайн и узнать правильный synatx для SQL-сервера см ниже фиксированного запроса

SELECT TransactionTotals.[Date] 
    , TransactionTotals.EntryID 
    , TransactionItems.ItemID 
    , TransactionItems.ClientID 
    , [FirstName] + ' ' + [LastName] AS Name 
    , TransactionItems.[Service] 
    , TransactionItems.Therapist 
    , TransactionItems.GiftCertificate 
    , TransactionItems.Charge 
    , TransactionItems.Gratuity 
    , TransactionTotals.Paid 
    , TransactionItems.Comments 

FROM CLIENTS INNER JOIN TransactionItems 
ON  CLIENTS.ClientID = TransactionItems.ClientID 
INNER JOIN TransactionTotals 
ON  TransactionTotals.EntryID = TransactionItems.EntryID 
WHERE TransactionTotals.[Date] = CAST(GETDATE() AS DATE) 
ORDER BY TransactionTotals.EntryID DESC; 
+0

WHERE TransactionTotals.Date = CAST (GETDATE() AS DATE) получает «Синтаксическая ошибка (отсутствующий оператор) – user1457613

+0

@ user1457613 Поместить полный запрос в ваш вопрос. –

+0

Ваша битка запроса верна, есть что-то еще в другом месте, которое вам не хватает –

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