WHERE

此项为可选项。该项指定要传输的记录必须满足的一个或多个条件。

要传输摘要记录,请使用此项指定要进行分组的记录,然后对记录进行分组。使用此项,可以指定记录必须满足才能属于某个组的一个或多个条件。未指定 WHERE 时,将对所有记录进行分组。

作为条件,指定要应用于指定文件成员中的记录的测试。将测试指定文件成员中的所有记录是否符合此处指定的条件。仅传输通过此测试的记录。

未指定 WHERE 时,则会传输指定文件成员中的所有记录。

条件格式如下所示:
field-name  test  value
字段名
这必须是以记录格式定义的字段子字符串或字段名。

可以通过指定受支持的函数来参控字段或常量,并将结果用于比较。受支持的函数和用法如下:

SUBSTR
返回字符串的指定部分。此函数包含三个参数:字段名、起始位置和所返回子字符串的长度。以下示例返回从 FULLNAME 字段的第 10 个字符开始的 20 个字符:

SUBSTR(FULLNAME 10 20)

VALUE
返回参数列表中的第一个非 null 值。(如果所有参数均为 null,则返回 null。)

VALUE(DEPOSIT WITHDRAW BALANCE)

CURRENT
返回当前系统的 DATE、TIME、TIMEZONE 或 TIMESTAMP。

CURRENT(TIMEZONE)

DIGITS
返回数字字段的字符串表示。

DIGITS(EMPLOYEE#)

CHAR
返回日期字段、时间字段或时间戳记字段的字符串表示。第二个参数用于指定要返回的字符串的 Systems Application Architecture® (SAA®) 格式(受支持的值为 USA、EUR、ISO 或 JIS)。

CHAR(DATEHIRE USA)

DATE
返回时间戳记字段的日期。

DATE(TIMECRTD)

TIME
返回时间戳记字段的时间。

TIME(TIMECRTD)

TIMESTAMP
返回时间戳记,将日期字段和时间字段组合。

TIMESTAMP(DATESEND TIMESEND)

YEAR
返回日期字段或时间戳记字段的年份。

YEAR(DATEHIRE)

MONTH
返回日期字段或时间戳记字段的月份。

MONTH(DATEHIRE)

DAY
返回日期字段或时间戳记字段的日期。

DAY(DATEHIRE)

DAYS
返回日期字段或时间戳记字段的年份日期(从 1 月 1 日开始计数)。

DAYS(DATEHIRE)

HOUR
返回时间字段或时间戳记字段的时间。

HOUR(TIMESEND)

MINUTE
返回时间字段或时间戳记字段的分钟。

MINUTE(TIMESEND)

SECOND
返回时间字段或时间戳记字段的秒。

SECOND(TIMESEND)

MICROSECOND
返回时间字段或时间戳记字段的微秒。

MICROSECOND(TIMECRTD)

test
这是要应用于字段或函数的比较类型。
可以使用以下测试。可以在这些测试之前和之后放置一个或多个空格。
注: 根据用户指定的确切字符搜索值。换言之,当用户的规范仅由大写字符组成时,仅返回大写字符串。同样,当规范仅包含小写字符时,仅返回小写字符串。
=
等于
<> 或 ><
不等于
>
对于
>=
大于或等于
<
小于
<=
小于或等于
LIKE
该字段类似于指定的值。
BETWEEN
该字段等于两个常量中的一个或两个常量之间的一个值。
IN
该字段与常量列表中的其中一个值相同。
IS
该字段包含 null 值。
ISNOT
该字段不包含 null 值。
测试用法如下:
使用 LIKE 测试
LIKE 测试检查使用字段名指定的字段中是否有指定为值的字符模式。要指定的字段必须是字符字段。

要测试的值必须是字符串常量。此字符串可以包含任何字符。百分号 (%) 字符表示由零个或更多字符组成的字符串。1 字节下划线 (_) 字符表示任何单个 1 字节字符。2 字节下划线 (_) 字符表示任何单个 2 字节字符。

以下示例说明了如何使用 LIKE 测试:
NAME LIKE '%ANNE%'

上一个示例搜索包含字符串 ANNE 的名称,例如 ANNE、ANNETTE 和 SUZANNE。

以下示例搜索以字符串 ANNE 开头的名称,例如 ANNE 和 ANNETTE。
NAME LIKE 'ANNE%'
以下示例搜索以字符串 ANNE 结尾的名称,例如 ANNE 和 SUZANNE。
NAME LIKE '%ANNE'
以下示例搜索第二个字符为 A 的所有名称。
NAME LIKE '_A%'
以下示例搜索以字符 J 开头的所有姓氏。
LSTNAM LIKE 'J%'
这与以下示例具有相同的效果:
SUBSTR (LSTNAM,1,1) = 'J'

当模式不包括百分号字符 (%) 时,字符串的长度必须与字段的长度相同。

使用 BETWEEN 测试
BETWEEN 测试会检查字段名中指定的字段中是否有等于或介于指定常量之间的字符串或数值。要测试的值必须是两个字符串常量或两个数值常量。这些常量的类型必须与用户指定的字段名的类型相同。使用 AND 定界两个常量。
以下示例搜索价格介于 50.35 和 75.3 之间(含)的记录:
PRICE BETWEEN 50.35 AND 75.3
以下示例搜索名称以 C 开头的记录:
NAME BETWEEN 'C' AND 'CZZZZZZZZZ'
以下示例搜索余额介于 0 和 5␠000 之间的记录。
BALDUE BETWEEN 0 AND 5000
这与以下表达式的意义相同。
BALDUE >= 0 AND BALDUE <= 5000
注:BETWEEN(最小值)AND(最大值)的形式指定要测试的值。例如,BETWEEN 1 AND 10 是有效的规范。但是,BETWEEN 10 AND 1 不返回任何记录。
使用 IN 测试
IN 测试会检查字段名中指定的字段是否有列表中指定为值的字符串或数值。要测试的值必须是字符串常量或数值常量的列表。此外,这些常量的类型必须与指定字段的类型相同。使用空格定界常量并将其括在括号中。最多可指定 100 个常量。以下示例展示了如何使用 IN 测试:
NAME IN ('SMITH' 'JONES' 'ANDERSON')
此示例搜索名字为 SMITH、JONES 或 ANDERSON 的记录。
以下示例在 STATE 字段中搜索值不是 NY、MN 或 TX 的值:
NOT STATE IN ('NY' 'MN' 'TX')
注: 根据用户指定的确切字符搜索值。换言之,当用户的规范仅由大写字符组成时,仅返回大写字符串。同样,当规范仅包含小写字符时,仅返回小写字符串。
使用 IS 测试
IS 测试会检查字段名中指定的字段是否有 null 值。
以下示例搜索佣金字段包含 null 值的记录:
COMMISSIONS IS NULL
使用 ISNOT 测试
ISNOT 测试会检查字段名中指定的字段是否有非 null 值。
以下示例搜索佣金字段不包含 null 值的记录:
COMMISSIONS ISNOT NULL
在测试中,可以组合逻辑 AND 和逻辑 OR。同时指定 AND 和 OR 时,将首先执行 AND 比较。最多可指定 50 个条件。例如:
MONTH=2 AND LOC='MIAMI' OR LOC='CHICAGO'
在此示例中,要选择的每个记录都必须满足以下条件:
MONTH=2 AND LOC='MIAMI'
或必须满足以下条件:
LOC='CHICAGO'
可以使用括号修改此命令。例如:
MONTH=2 AND (LOC='MIAMI' OR LOC='CHICAGO')
在此示例中,要选择的每个记录都必须满足以下条件:
MONTH=2
且它必须满足以下条件:
LOC='MIAMI' OR LOC='CHICAGO'
也可以使用 NOT。以下示例选择的项不仅从 DEPT 字段不等于 470 的记录传输数据,而且还从 DEPT 字段等于 470 且 STATE 等于 NY 的记录传输数据。
NOT (DEPT = 470) OR (DEPT = 470 AND
  STATE = 'NY')

比较可以从某一行开始并在下一行结束。但是,字段名不能从某一行开始并在下一行结束。字段名不得超过一行。

要测试的值是用引号引起来的字符串时,该值可以从某一行开始并继续到下一行。