1

我环顾四周,但找不到此 SQL 语句的问题:

    strSQL = "SELECT Directory.DisplayName, Department.DisplayName, Call.CallDate, Call.Extension, Call.Duration, Call.CallType, Call.SubType FROM (((Department INNER JOIN Directory ON Department.DepartmentID = Directory.DepartmentID) INNER JOIN Extension ON (Department.DepartmentID = Extension.DepartmentID) AND (Directory.ExtensionID = Extension.ExtensionID)) INNER JOIN Site ON Extension.SiteCode = Site.SiteCode) INNER JOIN Call ON Directory.DirectoryID = Call.DirectoryID WHERE (Call.CallDate)>=27/11/2012"

无论我更改 WHERE 什么,它总是返回数据库中的每一个值(至少我假设它确实如此,因为当我尝试这样做时,excel 完全挂起)这个 SQL 语句在 Access 中工作得非常好(如果日期周围有 ##)。知道如何解决这个问题,目前正在尝试创建一个允许用户在不同日期输入的 SQL 语句,但必须首先克服这个随机障碍。

编辑:SQL 数据库中的日期字段是 DD/MM/YY HH:MM:SS 格式,并且此查询是在 VBA - EXCEL 2010 中完成的。
另外,为了避免混淆,已从语句中删除了 TOP 10,即停止excel 检索数据库中的每一行。
我激活的当前参考是:MicrosoftX Data Objects 2.8 Library
Database 是一个 MSSQL,使用连接字符串:
Provider=SQLOLEDB;Server=#######;Database=#######;User ID=# #######;密码=########;

4

2 回答 2

3
WHERE (Call.CallDate) >= #27/11/2012#

用 包围日期变量#

编辑:请明确日期字符串,例如 27-Nov-2012

strSQL = "SELECT ........ WHERE myDate >= #" & Format(dateVar, "dd-mmm-yyyy") & "# "

如果您使用 ado,您应该查看Paramaters而不是使用动态查询。

EDIT2:感谢@ElectricLlama 指出它是 SQL Server,而不是 MS-Access

strSQL = "SELECT ........ WHERE myDate >= '" & Format(dateVar, "mm/dd/yyyy") & "' "
于 2012-11-27T08:05:16.910 回答
1

请验证 Call.CallDate 字段的数据类型为 DATETIME 或 DATE

如果您确实在 SQL Server 上运行它,请尝试以下语法:

SELECT Directory.DisplayName, Department.DisplayName, Call.CallDate, 
Call.Extension, Call.Duration, Call.CallType, Call.SubType 
FROM (((Department INNER JOIN Directory 
ON Department.DepartmentID = Directory.DepartmentID) 
INNER JOIN Extension ON (Department.DepartmentID = Extension.DepartmentID) 
AND (Directory.ExtensionID = Extension.ExtensionID)) 
INNER JOIN Site ON Extension.SiteCode = Site.SiteCode) 
INNER JOIN Call ON Directory.DirectoryID = Call.DirectoryID 
WHERE (Call.CallDate)>= '2012-11-27'

您看到的日期格式只是您的客户端工具决定显示的任何格式。日期不以任何格式存储,它们有效地存储为自 x 以来的持续时间。

默认情况下,如果要使用日期文字,SQL 将使用格式 YYYY-MM-DD。

但是你最好在代码中定义一个日期类型的参数,并尽可能长时间地保持你的日期数据类型为“日期”。这可能包括只允许他们使用日历控件输入日期以消除歧义。

于 2012-11-28T05:22:27.180 回答