Ms access MS Access选择空白/空/空文本记录 我试图确定测试空白/空/空文本记录的最佳方法。

Ms access MS Access选择空白/空/空文本记录 我试图确定测试空白/空/空文本记录的最佳方法。,ms-access,Ms Access,我所说的文字记录是指: 空的 空字符串(“”) 任意数量的空格(例如“) 我使用下表(名为Table1)尝试了不同的查询条件: 这里,空格记录包含任意数量的空格,空字符串记录包含一个空字符串(“”),而Null记录就是这样 我实现目标的第一个想法是使用以下查询: SELECT * FROM Table1 WHERE TextField IS NULL OR Trim(TextField)="" 这确实返回了三个目标记录:空格,空字符串&空 然而有点奇怪的是,使用:

我所说的文字记录是指:

  • 空的
  • 空字符串(
    “”
  • 任意数量的空格(例如

我使用下表(名为
Table1
)尝试了不同的查询条件:

这里,
空格
记录包含任意数量的空格,
空字符串
记录包含一个空字符串(
“”
),而
Null
记录就是这样


我实现目标的第一个想法是使用以下查询:

SELECT * FROM Table1 WHERE TextField IS NULL OR Trim(TextField)=""
这确实返回了三个目标记录:
空格
空字符串
&

然而有点奇怪的是,使用:

SELECT * FROM Table1 WHERE TextField = ""
返回
空字符串
记录
空格
记录:

这让我想到我的查询可以省略
Trim
函数,变成:

SELECT * FROM Table1 WHERE TextField IS NULL OR TextField=""
  • 但这可靠吗
  • 这是选择空文本记录时的最佳做法吗

或者,我考虑使用:

SELECT * FROM Table1 WHERE Nz(TextField)=""
  • 这种方法有缺点吗
  • 有没有更好的方法来实现这一点

编辑:具体来说,我的问题最终是:

选择空白文本记录的最佳方法是什么?

Nz(TextField)=""
是处理null和空字符串时最常用的方法

在Access中,长文本数据类型将自动修剪以节省空间,这就是为什么修剪(TextField)与TextField相同。如果您曾经将其转换为富文本数据类型,则它们将有所不同。在这种情况下:

TRIM(Nz(TextField))=""

应涵盖所有基础。

对于普通文本,Access将仅带空格的字符串作为空字符串处理(例如,
SELECT”“=”
返回-1=True)

这意味着6月7日推出的解决方案,
其中TextField&=“=”
,可能是最有效的解决方案。另一个竞争者是
Nz
函数,它由数据库引擎处理,并进行了一些优化

但是,在使用索引时,字符串连接和函数调用都会使索引无效
其中TextField为NULL或TextField=”“
不为NULL,并且如果
TextField
被索引,将是目前最快的

如果你将富格文本加入到混合中,你除了首先将其转换为普通文本之外,别无选择。在Access 2016中,当您在富文本字段中输入空格时,它实际上包含以下内容:
(您可以使用
RichTextField&“
”)来查看此内容

对于富文本字段,索引无论如何都不会起作用,因此可以使用以下方法:


其中明文(RichTextField)和“=”

我计算了至少5个独立的问题。试着问一个更具体的问题。我已经编辑了这个问题,希望我的调查范围更具体。为什么允许输入这些数据?我从不允许表设计使用空字符串。根据我的经验,Access会自动修剪以下空格,这意味着没有字段只有“任意数量的空格”。这意味着我只需要测试Null。因为有些人会反对使用Nz()-一个VBA函数调用-另一个选项:
WHERE TextField&=“=”
@June7,我同意你的观点并感谢你的建议,但是这些记录驻留在一个ODBC数据库中,其设计超出了我的控制范围;此外,上述数据库中的大部分数据都是从以前的ad nauseum系统的后端数据库迁移而来的。好的,访问数据链接。你们说过引用TextField和Trim(TextField)的结果相同,所以Access是删除空格?或者尝试:
Trim(TextField)&“=”
Trim(TextField)&“=”
——少一个函数调用。@Jeffrey感谢您的回答。我注意到
短文本
字段(或者Access 2007中的
文本
字段)也会自动删除数据输入上的尾随空格,但是,我不确定在处理表中已经包含只包含空格的记录的数据库时,这种行为是否可靠。我还不确定为
Trim
提供空值而不是字符串的结果。
Trim(null)
返回空值。谢谢Erik的全面回答,我感谢你的透彻。我很惊讶
null&“
是有效的,但是VBA似乎非常宽容。这并不罕见。有些SQL变体,如T-SQL,有一个concatenate null和null设置,可以打开或关闭(现在不推荐使用)。对于访问,将null连接到字符串始终会生成该字符串