我似乎无法找到常见情况的直接答案。我最近将 Access 数据库转换为 SQL Server,并且有链接表(odbc)。由于日期现在在 datetime2 中存储为 yyyy-mm-dd hh:mm:ss,因此我在 VBA 中将表单写入数据库没有问题,例如 Format(VBA.Date, "yyyy-mm -dd 00:00:00")
.
但是,我在 Access 中有一些简单的查询,其中包含一个 where 子句,例如:
Where Field = Date()
还有
Where Field Between Date() And Date()-7
从 Access 查询到 SQL Server 查询这些内容的正确方法是什么?
最佳答案
您的 Access 代码
Where Field = Date()
SQL Server
Where Field = CAST(GETDATE() AS DATE)
函数 GETDATE() 获取当前日期时间。
从今天到过去 7 天的日期
Where Field BETWEEN CAST(DATEADD(DAY, -7, GETDATE()) AS DATE)
AND CAST(GETDATE() AS DATE)
我使用 CAST()
函数的原因是 GETDATE()
返回当前日期时间,如下所示 2014-02-09 22:09: 53.067
现在,如果您要检查 WHERE Field 包含今天日期的值,则只会检查值 where Field = '2014-02-09 22:09:53.067'
而不是 Date 的记录>2014-02-09
它还会考虑时间,因为我使用 CAST 函数来删除 GETDATE() 函数中的时间部分。
SELECT GETDATE() Returns '2014-02-09 22:09:53.067'
SELECT CAST(GETDATE() AS DATE) Returns '2014-02-09'
我已经解决了您的查询问题,其中有很多问题:S我建议在线阅读书籍并学习 sql server 的正确语法,请参阅下面的固定查询
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;
关于sql-server - MS Access Date() 函数和 SQL Server 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21665577/