【问题标题】:ADO MAX Time queryADO MAX 时间查询
【发布时间】:2014-03-14 03:10:05
【问题描述】:

我正在使用 ADO\ACE.OLEDB 查询来访问 Excel 工作表中的数据。此表中的一列是 00:00:00 格式的时间戳。

我对该列的选择最大查询工作正常,但它返回错误的“最大”时间。例如,如果我有以下时间戳:
08:15:00
09:45:00
10:00:00

SELECT MAX 查询将返回 09:45:00,并忽略任何后续时间戳。如果我转到查询表,并使用 text-to-columns 将该列中的所有单元格转换为“时间”,则查询将返回正确的值 10:00:00。

记录在 excel 工作表中的时间戳在一天中经常由许多不同的人使用他们自己的 ADO Update\Insert 查询进行更新,因此我无法打开工作表并将单元格手动转换为正确的类型. update\insert 查询将单元格类型设置为 General。

所以我的问题是这样的。 有没有办法
A) 在 update\insert into ADO 查询中指定数据类型,以便单元格具有正确的数据类型?或者
B) 强制 SELECT MAX 查询将列解释为时间值而不是文本?

如果没有关于如何进行的建议?

编辑:我仔细查看了我正在查询的 excel 表。我注意到每个单元格前面都有一个单引号。我想如果我可以在记录条目时删除它,excel可能会正确格式化单元格作为时间。 以下是 wha 用于将条目写入工作表的基本示例。 更新 [Sheet1$] 设置 StopTime='09:45:00' WHERE Date= '3/12/2014' AND St​​artTime='9:30:00'

是否可以重写以不包含单引号?注意没有结束引号。

【问题讨论】:

  • 我很难看出“09:45:00”如何大于“10:00:00”。是否可能存在未显示的日期组件(例如,“3/12/2014 09:45:00”和“3/10/2014 10:00:00”)?
  • 感谢您的回复。似乎没有。时间以文本形式存储在 Excel 工作表中。当我转换为时间时,它会显示正确的序列号。另外,这些都是在同一天制作的,所以它们都是 2014 年 3 月 12 日。

标签: sql excel vba ado


【解决方案1】:

Excel 中单元格开头的单引号会强制 Excel 将单元格值解释为文本。单引号可能被插入,因为更新语句使用单引号,表示字符串。您也许可以改用## 定界符,它专门指示日期/时间值(我说“可以”,因为我没有对此进行测试)。例如:

UPDATE [Sheet1$]
SET StopTime = #09:45:00#
WHERE [...]

另一方面,您可以使用CDate 函数强制将列解释为日期/时间:

SELECT MAX(CDate(StopTime)) AS MaxTime
FROM [Sheet1$]

在这种情况下,您只需要注意无法转换为有效时间的值,这将导致查询出错。

【讨论】:

    【解决方案2】:

    我什至没有意识到这一点,但我给出的例子是有缺陷的。记录的内容不包括前导零。由于我使用的是 24 小时制,因此我可以通过在记录的时间中写入前导零来纠正此问题。

    基本上它是一个,如果 LEN(time)=7 则 time = 0 & time。

    到目前为止,这似乎有效。

    【讨论】:

      猜你喜欢
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-17
      相关资源
      最近更新 更多