悖论:查询日期列 + 时间列作为日期时间

Posted

技术标签:

【中文标题】悖论:查询日期列 + 时间列作为日期时间【英文标题】:Paradox: Query a Date column + a Time column as a DateTime 【发布时间】:2009-06-25 19:55:34 【问题描述】:

首先,我是 Paradox 新手。 其次,我正在查询第三方软件包的数据库,无法更改架构。

我有两个简单命名为“日期”和“时间”的字段,我想将它们作为 DateTime 进行查询(根据我的 MS SQL 经验)。

这可能吗?

我尝试了几个查询,当命令有效时,我得到“条件表达式中的数据类型不匹配”。

此外,如果这有什么不同的话,这将来自大约 1999 年至 2000 年的 Paradox 数据库。

编辑:即使是字段的简单字符串连接也会有很大帮助,因为我可以在代码中处理它。

编辑:回应 a.i.breveleri 的回答。我收到这条消息:

错误 [42000] [Microsoft][ODBC 悖论 驱动程序]语法错误(缺失 运算符)在查询表达式中 'CAST(m.DateComplete AS TIMESTAMP) - CAST([1/1/3000] 作为时间戳) + CAST(m.TimeComplete AS TIMESTAMP)'。

当我运行这个查询时:

select distinct 
  CAST(m.DateComplete AS TIMESTAMP) - 
  CAST("1/1/3000" AS TIMESTAMP) + 
  CAST(m.TimeComplete AS TIMESTAMP)
from Mean m 

【问题讨论】:

你写的是QBE查询还是SQL查询? “日期”和“时间”列的 Paradox 数据类型是什么? -阿尔。 SQL查询;我对数据类型的最佳猜测是“日期”是日期列,“时间”是字符串。 抱歉这么密集,但是您是否使用 Paradox for Windows 来访问数据?如果没有,您如何连接到 Paradox 数据库?其他 SO 主题表明,这样的查询可能对 ODBC 驱动程序的选择很敏感。 -阿尔。 【参考方案1】:
 SELECT CAST(f.DateColumn AS VARCHAR(20)) + ' ' + CAST(f.TimeColumn AS VARCHAR(20)) 
 FROM Foo f

这给了你连接的字符串。

 SELECT CAST(CAST(f.DateColumn AS VARCHAR(20)) + ' ' + CAST(f.TimeColumn AS VARCHAR(20)) AS TIMESTAMP) As FooTime
 FROM Foo f

为您提供综合时间。

【讨论】:

运行“..., cast(Date as varchar(20)) ...”时出现“缺少运算符”错误 日期是保留字,所以你可能需要双引号。【参考方案2】:

QBE 查询:

Query
ANSWER: :PRIV:ANSWER.DB

test.db | Date | Time                         | 
        | _x   | _y, calc _x+_y as "DateTime" | 

EndQuery

SQL 查询:

SELECT DISTINCT
    CAST(D0."Date" AS TIMESTAMP) -
    CAST("1/1/3000" AS TIMESTAMP) +
    CAST(D0."Time" AS TIMESTAMP)
FROM 
    "test.db" D0

-阿尔。

【讨论】:

将 SQL 查询与 MS ODBC 驱动程序一起使用时出现语法错误。我已经更新了我的问题。 看起来 Microsoft ODBC 桌面数据库驱动程序(可能是 ODBCJT32.DLL)正在将“1/1/3000”更改为 [1/1/3000]。尝试使用单引号“1/1/3000”。或者,您可以查看 DataDirect Technologies(以前称为 Merant,INTERSOLV ODBC 驱动程序的制造商)以获取替代驱动程序。 -阿尔。

以上是关于悖论:查询日期列 + 时间列作为日期时间的主要内容,如果未能解决你的问题,请参考以下文章

jdbcTemplate 查询行映射日期列一般

Knexjs 返回 mysql 时间戳、日期时间列作为 Javascript 日期对象

索引布尔列与日期时间列的查询性能

如何查询日期时间列 - MS SQL 2008

数据库的日期区间查询方法。

如何将字符串日期列转换为 Google 大查询中的日期列?