日期/时间作为Access SQL中的字符串 - 选择特定日期

时间:2017-01-29 08:28:31

标签: sql ms-access

我想在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)

任何人都可以帮我解决这个问题吗?

劳伦斯 enter image description here

enter image description here

4 个答案:

答案 0 :(得分:0)

你需要先检查两件事......

  1. 您的插入查询是否正常运行..您确定数据库中是否存在“2016.10.5”数据?
  2. 您可以执行标准查询来获取时间数据吗?意思是你可以'SELECT FROM AUDCAD“获取时间数据2016.10.5

答案 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;