在Access

时间:2016-11-26 10:24:13

标签: sql vba ms-access access-vba

我在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单独完成?

2 个答案:

答案 0 :(得分:2)

您的SQL语句中需要遵守MS Access'SQL方言:

的几个项目
  1. 字段名称不能用引号括起来。在Oracle / Postgres中,您可以对列/表标识符使用双引号,Access使用方括号[date]或反引号`date`(通常用于转义空格和保留字)。注意: date number 均为reserved words。与MySQL一样,在Access字符串文字中可以使用单引号或双引号。
  2. 日期值需要括在#(代替引号)或包含在CDate()函数中。
  3. 任何SQL查询中的WHERE子句都必须遵循FROM和/或JOIN子句。
  4. LIKE运算符(您可能需要找到-P模式)使用星号而非百分比运算符(ALIKE表示ANSI-Like使用%) 。话虽如此,如果您通过ODBC(而不是GUI .exe程序)从外部连接到MS Access数据库,LIKE确实需要%
  5. 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#