我在MS Access中有一个表格,如下所示:
number | type | date | person |
---------------------------------
3273 | green | 03/02/2015 | Andre |
2556 | red | 02/01/2016 | Roger |
2556-P | yellow | 25/12/2015| Roger |
8354 | green | 18/03/2016| Andre |
6754 | green | 16/03/2016| Jack |
要从.accdb
中的外部E:\folder\file_name.accdb
文件中删除此表,执行了以下查询:
SELECT all_data.number, all_data.`date`, all_data.`type`, all_data.`person`
FROM `E:\folder\file_name.accdb`.all_data all_data
我之前只有MySQL和PostgreSQL的经验,而且从未使用过导入的表。我需要为每个人选择和计算唯一数字(那些带有-P和其他字母的数字),因为这些数字的日期是X / 12/2015。
我该如何处理?我试过了
SELECT all_data.number WHERE 'date' BETWEEN '2015-12-01 00:00:00' AND '2015-12-31 00:00:00' FROM `E:\folder\file_name.accdb`.all_data all_data`,
但它似乎没有用,它抱怨我使用date
。
我应该做些什么,也许最好使用VBA,或者这可以通过SQL单独完成?
答案 0 :(得分:2)
您的SQL语句中需要遵守MS Access'SQL方言:
的几个项目[date]
或反引号`date`
(通常用于转义空格和保留字)。注意: date 和 number 均为reserved words。与MySQL一样,在Access字符串文字中可以使用单引号或双引号。#
(代替引号)或包含在CDate()
函数中。 WHERE
子句都必须遵循FROM
和/或JOIN
子句。 LIKE
运算符(您可能需要找到-P
模式)使用星号而非百分比运算符(ALIKE
表示ANSI-Like使用%
) 。话虽如此,如果您通过ODBC(而不是GUI .exe程序)从外部连接到MS Access数据库,LIKE
确实需要%
。SQL (以下所有查询都是等效的)
SELECT all_data.number
FROM [E:\folder\file_name.accdb].all_data all_data
WHERE [date] BETWEEN #2015-12-01 00:00:00# AND #2015-12-31 00:00:00#
AND [number] LIKE '*-P';
SELECT all_data.number
FROM `E:\folder\file_name.accdb`.all_data all_data
WHERE `date` BETWEEN CDate('2015-12-01 00:00:00') AND CDate('2015-12-31 00:00:00')
AND `number` ALIKE '%-P';
此外,对于日期,您可以使用与原始字符串文字DD/MM/YYY
相同的格式:
SELECT all_data.number
FROM [E:\folder\file_name.accdb].all_data all_data
WHERE [date] BETWEEN #01/12/15# AND #31/12/15#
AND [number] LIKE '*-P';
SELECT all_data.number
FROM `E:\folder\file_name.accdb`.all_data all_data`
WHERE `date` BETWEEN CDate('01/12/15') AND CDate('31/12/15')
AND `number` ALIKE '%-P';
答案 1 :(得分:0)
在VBA中使用日期时,您需要将它们放在英镑符号之间。喜欢这个
Dim this as date
this = #01/01/2016#