2014-02-09 160 views
0

我似乎无法找到似乎是常见情况的直接答案。我最近将访问数据库转换为SQL Server,并具有链接表(odbc)。由于日期现在被存储在datetime2中,如yyyy-mm-dd hh:mm:ss,我在VBA中没有任何问题可以将格式写入数据库,如格式(VBA.Date,“yyyy-mm-dd 00 :00:00" )。MS Access Date()函数和SQL Server查询

但是我在访问一些简单的查询有一个where子句,如:

where字段=日期()

其中field日期()和日期()之间-7

什么是正确的方式来查询这些从Access查询到SQL服务器?

+1

BETWEEN参数必须从最小到最大列出。 [不是说你应该使用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()获取当前日期时间。

今天和过去的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 = '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建议看书在线学习SQL Server的正确synatx,请参阅固定的查询低于

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

您的这一查询位是正确的还有其他地方有其他的东西你错过了 –