S O R T 命 令

对当前选定表进行排序
并将排过序的记录输出到新表中
语 法
SORT TO TableName
O N FieldName1 [/A | /D] [/C]
[, FieldName2 [/A | /D] [/C] ...] [ASCENDING | DESCENDING]
[ Scope ] [FOR lExpression1 ] [ W H ILE lExpression2 ] [FIELDS FieldNameList
| FIELDS LIKE Skeleton
| FIELDS EXCEPT Skeleton ] [NOOPTIMIZE]
参 数 描 述
TableName



存
放 经 过 排 序 的 记 录 的 新 表 名 V isual FoxPro 为 表 取 .DBF 文 件
扩 展 名 如果 文 件 不 包 含 扩 展 名 则 自 动 为 它 指 定 .DBF 扩 展
名
O N FieldName1

在当前选定的
要排序的表中指定字段 字段的内容和数据类型决定了记录在新表中


的顺序
默认情况是按升序排序 不能对备注或通用字段排序


下例为下表按
cust-id 字段排序 Customer 表已打开并排序过 创建一个新 temp 表
Temp
表中的记录按 cust-id 排序
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata') USE customer && 打开 Customer 表
CLEAR
LIST FIELDS company, cust_id NEXT 3 SORT TO temp ON cust_id
USE temp
LIST FIELDS company, cust_id NEXT 3
WAIT WINDOW 'Now sorted on CUST_ID' NOWAIT







要
进 一 步 排 序 新 表 可 以 包 含 附 加 字 段 名 ( FieldName2
FieldName3 ) 第 一个 字 段 FieldName1 是 主 排 序 字 段 第 二 个 字
段 FieldName2 是 第 二 级 排 序 字段 依 此 类 推
[/A | /D] [/C]






对
于 排 序 中 包 含 的 每 个 字 段 可 以 指 定 排 序 顺 序 升 序 或 降
序 / A 为 字 段指 定 了 升 序 / D 指 定 了 降 序 / A 或 /D 可 以 作 用
于 任 何 类 型 的 字 段





默认情况下
字符型字段的排序顺序区分大小写 如果在字符型字段名后包含 /C
则忽略大小写 可 以 把 /C 选项同 /A 或 /D 选项组合起来 例 如 /AC 或 /DC


如下例
创建新表 clients Orders 表以定货日期升序和运费降序排列
USE orders
SORT TO clients ON order_date/A ,freight/D ASCENDING
将 所
有 不 带 /D 的 字 段 指 定 为 升 序 排 列
DESCENDING
将 所
有 不 带 /A 的 字 段 指 定 为 降 序 排 列

如
果 省 略 ASCENDING 或 DESCENDING 参 数 则 排 序 顺 序 默 认 为 升 序
Scope



指
定 需 要 排 序 的 记 录 范 围 Scope 子 句 包 括 ALL NEXT nRecords
RECORD
nRecordNumber 和 REST

SORT
命 令 的 默 认 范 围 是 ALL 即 所 有 记 录
FOR lExpression1





在
当 前 表 中 指 定 排 序 中 只 包 含 逻 辑 条 件 lExpression1 为 真
(.T.) 的 记录 FOR 子 句 可 以 有 条 件 地 排 序 记 录 筛 掉 不 满 足
条 件 的 记 录



如
果 lExpression1 是 可 优 化 表 达 式 Rushmore 会 优 化 这 个 SORT
... FOR 命令 为 达 到 最 优 性 能 应 在 FOR 字 句 中 使 用 可 优 化 表
达 式
相 关
信 息 请 参 阅
Microsoft Visual FoxPro 6.0 中 文 版 程 序 员 指 南
的 第 十 五章
W H ILE lExpression2






指
定 一 个 条 件 在 当 前 表 中 只 要 逻 辑 表 达 式 lExpression2 的
计 算 值 为真 则 依 据 此 条 件 排 序 中 包 含 这 个 记 录
FIELDS FieldNameList
指 定
用 SORT 命 令 创 建 的 新 表 中 要 包 含 的 原 表 中 的 字 段 如 果 省
略 FIELDS

字
句 新 表 中 将 包 括 原 表 中 所 有 字 段
FIELDS LIKE Skeleton
在 新
表 中 包 含 那 些 与 字 段 梗 概 Skeleton 相 匹 配 的 原 表 字 段
FIELDS EXCEPT Skeleton
在 新
表 中 包 含 那 些 不 与 字 段 梗 概 Skeleton 相 匹 配 的 原 表 字 段
字段梗概
Skeleton 支持通配符

例如
列出新表中所有以字母 A 和 P 开头的字段使用如下命令
SORT TO mytable ON myfield FIELDS LIKE A*,P*
LIKE
子句可与 EXCEPT 子句同时使用
SORT TO mytable ON myfield FIELDS LIKE A*,P* EXCEPT PARTNO*
NOOPTIMIZE
关 闭
SORT 命 令 的 Rushmore 优 化
说 明
当前表中的一个或多个指定字段决定了记录在新表中出现的顺序







重
要 提 示 要确保有足够的磁盘空间保存新表
以及存储在排序过程中创建的临时工作文件
排序所需的磁盘空间可能是原表的三倍 可以用 DISKSPACE ( ) 和SYS(2020)
函数确定可用磁盘空间大小 如果在排序过程中 磁盘空间不足 Visual FoxPro
会显示错误信息 并删除临时工作文件




包含数字和空格的字符型字段可能不会按照所希望的那样排序
这是因为数值型字段从右向左填充 空格位于左边 而字符型字段是从左向右填充
空格位于右边



例如
表的两个记录包含字符型字段 一个是 1724 另一个是 18 而表按该字段以升













序排序
则包含 1724 的记录会出现在包含 18 的记录的前面 这是因为 Visual FoxPro
从左向右读取字符型字段中的字符 由于 17 1724 比 18 18 小 则 1724
出现在前面 为避免这类问题 应在位数较小的数字前加零 0018
或者使用数值型字 段
请 参 阅
COPY FILE , DISKSPACE ( ) , INDEX , SYS(2020)
