使用 SQL 导入数据子集

使用 ODBC 从数据库导入数据时,可以使用结构化查询语言 (SQL) 表达式仅导入所需记录(行)。SQL 用在许多数据库应用程序中。Minitab 不会对 SQL 表达式执行操作,只会将其传递给数据库。

选择要导入的字段

  1. 选择文件 > 查询数据库 (ODBC)
  2. 选择数据源。出现提示时,选择数据库。
  3. 在“查询数据库 (ODBC)”对话框中,从可用表格下拉列表中选择要查询的表格。
  4. 使用箭头按钮将要导入的字段移到所选字段
  5. 单击使用行
  6. 使用行中,输入用于定义要导入的记录的表达式。这些记录将成为 Minitab 中的行。 表达式以关键字“where”开始,并包含字段名、逻辑运算符(如“And”和“=”)、SQL 函数和值。有关受支持的 SQL 函数的更多信息,请参见数据库应用程序文档。
  7. 单击每个对话框中的确定

SQL 表达式语法准则

不同数据库应用程序的 ODBC 驱动程序之间的语法规则有所不同。如果您需要语法方面的帮助,请联系您的数据库管理员。

文本值
文本值的语法必须遵循 ODBC 驱动程序的语法规则,如下所示:
  • 对于 Microsoft® Access 和许多其他数据库,将文本值括在单引号内(例如,'Morristown')。
  • 对于 Oracle 或 SQL Server 数据库,将文本值括在两组双引号内(例如,""Morristown"")。
数字值
不要将数字(如 300)括在任何特殊字符内。
日期/时间值
对于 Access 和 dBASE 数据库,将日期括在井号内(例如,#12/31/2016#)。对于其他数据库,请参见应用程序的文档。还可以使用日期/时间函数,而不是输入特定日期。
字段名
字段分隔符因 ODBC 驱动程序不同而异。如果通过从“使用行”对话框中的字段列表中选择字段名来输入字段名,Minitab 会将字段括在适用于您的 ODBC 驱动程序的分隔符内。
函数
要表明函数是 ODBC 函数而不是您从中执行导入的数据库应用程序本身的函数,可使用括号和字母“fn”(例如 {fn SQRT(128)})。如果从“使用行”对话框中的列表中选择函数,Minitab 会自动添加必要的语法。
通配符
对于所有 SQL 查询中的通配符,可使用百分号 (%) 而非星号 (*),可使用下划线 (_) 而非问号 (?)。

Microsoft® Access 的 SQL 表达式示例

针对 Access 以外的其他数据库应用程序的语法可能有所不同。

注意

为获得最佳结果,请勿复制并粘贴表中的这些表达式。请直接将其键入到对话框中。

要导入的数据 SQL 表达式
2017 年第一季的记录
where DATE >= #1/1/17# And DATE < #4/1/17#
自 2010 年 1 月 1 日开始雇佣的、在财务部门工作的员工的记录
where DATE_HIRED > #1/1/10# And DEPT = 'Finance'
过去 30 天的数据
where `DateFieldName` > Now() - 30
昨天的数据
where (Format(Now-1,'mm-dd-yy')=Format(DateFieldName,'mm-dd-yy'))

为什么一些 SQL 函数无效

SQL 具有可以用来构建表达式的 ODBC 函数。但是,某特定 ODBC 驱动程序可能并非支持所有 ODBC 函数。例如,Microsoft® Access ODBC 驱动程序不支持 TIMESTAMPDIFF 函数。如果您收到错误消息,该消息是源自 ODBC 驱动程序,而不是 Minitab。

下面是在使用 ODBC 和 TIMESTAMPDIFF 函数查询 Microsoft® Access 时收到的错误消息示例:
"SQL Error State: 37000, Native Error Code: FFFFF3E2, ODBC Error: [Microsoft] [ODBC Microsoft® Access Driver] Undefined function 'TIMESTAMPDIFF' in expression."

Access 提供 TIMESTAMPDIFF 的备择函数。此备择函数是 DATEDIFF( )。以下查询将检索员工记录中的三列。第一列是从员工的开始日期一直到今天的已过去天数。第二列和第三列分别是员工的姓名和开始日期。

ODBC; Connect "DSN=Test;DBQ=Q:\Trumparc.mdb;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;PWD=msl;SystemDB=Q:\secured.mdw;UID=msl;"; SQLString "SELECT DateDiff('y', `StartDate`, Now()),`Name`,`StartDate` FROM `Employee`".