在 Visual FoxPro 中使用 null 值

本文介绍如何在 Visual FoxPro 命令和函数中使用 null 数据值。

原始产品版本: Visual FoxPro
原始 KB 数: 130307

概要

Visual FoxPro 版本 3.0 支持 null 数据值。 在版本 3.0 之前,FoxPro 的版本没有直接支持空数据值。 本文介绍传递给 Visual FoxPro 命令或函数时,Visual FoxPro 遵循的一般规则用于处理 null 值(表示为 .NULL.)。

详细信息

当值缺失、不相关或未知时,请使用 null 值 (.NULL.) 值。 在早期版本的 FoxPro 中,未知或缺失的值由空格或零表示,这些值可能已被误解。 使用 Visual FoxPro,现在可以在字段中存储 null 值。

请务必注意,Visual FoxPro 中的 null 值 (.NULL.) 与空、空白或零值不同。 Null 表示缺少值,因此 null 永远不会等于、大于或小于另一个值、null 或非 null。 Visual FoxPro 对 null 值的支持符合 ANSI 标准,并影响使用值和表达式的产品的任何区域。

null 值的一般规则

下面是传递给 Visual FoxPro 命令或函数的 null 值的常规规则:

  • 命令在传递 null 时生成错误。

  • 接受 null 值的函数将作为结果返回 .NULL.

  • 如果向需要数值的函数提供了空值,则会产生错误。

  • ISBLANK()ISDIGIT()ISLOWER()ISUPPER()ISALPHA()EMPTY() 每个在传递 null 值时返回 false(.F.)。

  • ISNULL() 传递 null 值时返回 true (.T.)。

  • 命令 INSERT SQL 和 SELECT SQL 通过 IS NULL 和 IS NOT NULL 子句处理 null 值。

  • SQL 聚合函数(例如 MAX()MIN())并 SUM() 忽略聚合中的所有 null 值。

  • 如果所有提供的值为 null 值,则 Visual FoxPro 聚合函数将传播 .NULL. ,否则将忽略任何 null 值。

本文的其余部分提供了有关这些常规规则的详细信息和示例。

命令在传递 null 时生成错误

Visual FoxPro 命令是产生动作的语句。 示例命令有USEBROWSEDELETE。 例如,该 USE 命令返回以下代码的错误:

STORE .NULL. TO nWorkArea
USE mytable IN (nWorkArea)

USE 命令的 IN 子句需要一个数值或字母值,当传递一个 .NULL. 时,会产生错误表编号无效

NVL() 函数可用于在不支持或无关的计算或操作中删除 null 值。

STORE .NULL. TO nWorkArea
USE mytable IN NVL(nWorkArea,0)

这将在第一个可用的 workarea 中打开 mytable。 有关NVL()函数的详细信息,请查看帮助文件或 Visual FoxPro 文档。

接受 null 值的函数返回 。零。 因此

Visual FoxPro 函数是执行特定任务的例程,并采用零个或多个参数。 函数的示例包括 ISBLANK()UPPER()SUBSTR()。 大多数 Visual FoxPro 函数都允许将 null 值作为参数传递,而不会生成错误,但从函数返回一个 .NULL. 值。 换句话说,将 null 值传递给函数时,结果始终为 null。 这也是在数学公式中处理 null 值的方式。 例如,将 null 值添加到 500 等于 null,null 值乘以零等于 null(而不是零)。

以下示例代码返回 .NULL.

cLastName = "Johnson"
nBegin = 5
nExtract = .NULL.
?SUBSTR(cLastName,nBegin,nExtract)

此规则的例外是 ISBLANK(),、ISDIGIT()ISLOWER()ISUPPER()ISALPHA()EMPTY()函数 -每个规则都返回一个.F.值。 该 ISNULL() 函数返回一个 .T. 值。

使用新子句插入 SQL 和 SELECT SQL 处理 Null 值

两个新子句(IS NULL 和 IS NOT NULL)在 INSERTSELECT SQL 命令中处理 null。 例如,若要在 cLastName 不为 null 的表中查找所有记录,请使用以下命令:

SELECT cLastName FROM mytable WHERE cLastName IS NOT NULL

若要查找 null 值,请使用 IS NULL 子句。

SQL 聚合函数忽略 Null 值

聚合函数是一个函数,它执行数值运算,例如对值组(聚合)执行加法、最小值、最大值或平均值。 聚合函数的示例包括MAX()MIN()SUM()

SELECT例如,SQL 命令可以使用聚合函数从表中检索数值。 例如,以下命令从名为 SELECTnYTDSales 的字段中返回最大值:

SELECT MAX(nYTDSales) from mytable

对包含 .NULL. 值的字段执行的任何 SQL 聚合函数都忽略 .NULL. 这些值,返回将 null 值视为不存在的结果(不是聚合的一部分)。

有关.NULL.值和上述函数的详细信息,请在 Visual FoxPro 帮助文件中搜索主题。