【问题标题】:OpenRowset filter query results by dateOpenRowset 按日期过滤查询结果
【发布时间】:2026-01-17 20:15:02
【问题描述】:

我正在尝试按日期过滤一些查询。我正在使用 OPENROWSET 从 DBF 表中提取数据,但我无法按日期过滤,Visual Studio 说数据类型是数据库日期 [DT_DBDATE]。我正在使用这个查询:

SELECT * FROM
OPENROWSET(
'VFPOLEDB', 
'C:\FOLDER\VFPDB\TABLES' 
;'';'', 
'SELECT *
FROM pedidoc
WHERE date BETWEEN '20120301' and '20120330''
) AS pedidoc

但是 sql server 说“语法不正确整洁 '20120301' 知道如何在 OPENROWSET 中进行过滤吗?

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    您需要为过滤器使用双引号,并在日期部分之间使用带有- 的日期格式。

    SELECT * FROM
    OPENROWSET(
    'VFPOLEDB', 
    'C:\FOLDER\VFPDB\TABLES' 
    ;'';'', 
    'SELECT *
    FROM pedidoc
    WHERE date BETWEEN ''2012-03-01'' and ''2012-03-30'' '
    ) AS pedidoc
    

    【讨论】:

    • 显示另一个错误 OLE DB 提供程序“VFPOLEDB”链接服务器“(null)”返回消息“运算符/操作数类型不匹配。”。消息 7320,级别 16,状态 2,第 1 行无法执行查询“SELECT * FROM pedidoc
    • 该列是否在源中定义为日期数据类型?
    • 是的,字段类型 = 日期
    【解决方案2】:

    在 OPENROWSET 中,SELECT 语句的语法必须为 OLEDB 提供者所接受。在这种情况下,不要使用 SQL SERVER 语法,而是使用 VISUAL FOXPRO 语法:

    SELECT * FROM
    OPENROWSET(
    'VFPOLEDB', 
    'C:\FOLDER\VFPDB\TABLES' 
    ;'';'',
    'SELECT * FROM pedidoc WHERE BETWEEN(date, {^2012-03-01}, {^2012-03-30})'
    ) AS pedidoc
    

    VFP->MSSQL 的日期/时间类型转换可能存在问题,因此使用 DTOS 函数将它们转换为字符串(日期到字符串):

    'SELECT DTOS(date) as datestr FROM pedidoc WHERE BETWEEN(date, {^2012-03-01}, {^2012-03-30})'
    

    【讨论】: