我想在MS Access中运行SQL,如下所示:
SELECT Time, Ask, Bid
FROM AUDCAD
WHERE Time LIKE '2016.10.05'
ORDER BY ID;
但结果是什么,时间字段数据如下所示:
2016.12.05 09:42:17.026
2016.12.05 09:42:17.387
2016.12.05 09:42:17.951
2016.12.05 09:42:18.464
...
2016.12.06 09:24:41.449
2016.12.06 09:24:41.854
2016.12.06 09:24:42.258
因此,我想逐日提取数据(本例:2016.10.05)
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:0)
你需要先检查两件事......
答案 1 :(得分:0)
您必须在Access SQL中使用正确的日期表达式语法:
SELECT [Time], Ask, Bid
FROM AUDCAD
WHERE [Time] = #2016/10/05#
ORDER BY ID;
或者,如果Time有时间组件:
SELECT [Time], Ask, Bid
FROM AUDCAD
WHERE Fix([Time]) = #2016/10/05#
ORDER BY ID;
但是,它看起来像是从SQL Server中的 DateTime2 字段中检索数据。
因此,要么将数据类型更改为 DateTime ,要么使用SQL Native Driver版本10或11进行ODBC连接。如果没有,您将收到日期/时间作为文本,而不是日期/时间值。
答案 2 :(得分:0)
DateTime字段的分隔符为#
。例如:#12/30/2016#。
我建议在VBA(m / d / y)中始终使用美国订单,即使本地机器配置不正确。它的工作方式很好。
答案 3 :(得分:0)
您的示例查询
SELECT Time, Ask, Bid
FROM AUDCAD
WHERE Time LIKE '2016.10.05'
ORDER BY ID;
使用不带任何通配符的LIKE子句,因此WHERE Time LIKE '2016.10.05'
的行为与WHERE Time = '2016.10.05'
的行为相同。这不会返回任何行,因为[Time]列在日期之后总是包含一些字符。
默认情况下,Access使用星号(*
)作为“0或更多字符”通配符,所以
SELECT Time, Ask, Bid
FROM AUDCAD
WHERE Time LIKE '2016.10.05 *'
ORDER BY ID;
应该有效。或者,您可以使用带有百分比(%
)通配符的ALIKE(“ANSI LIKE”)关键字:
SELECT Time, Ask, Bid
FROM AUDCAD
WHERE Time ALIKE '2016.10.05 %'
ORDER BY ID;