Access中Left()和Left$()函数的区别

4

我正在尝试调试一条出错的查询。该查询使用Left$([blahblah],4)而不是Left([blahblah],4)。

在Microsoft Access中,Left()和Left$()函数有什么区别?

2个回答

8

在VBA中,美元符号$是String数据类型的类型声明字符。

Left$()返回的结果是一个字符串,而Left()返回的是Variant。

如果存在任何可能为空值的情况,则必须使用Left(),因为Variant可以为空值,但String不能。为了证明这一点:

  1. 按Ctrl+G打开即时窗口。

  2. 输入: ? Left(Null,1) 答案是Null。

  3. 现在输入: ? Left$(Null,1) 这会生成错误94。因为结果应该是Null,而String不能为Null,所以你会收到“无效使用Null”的错误。

如果在VBA代码中处理字符串值,Left$()稍微更有效率,因为它避免了与Variant相关的开销和低效性。然而,如果有任何可能涉及到Nulls,请使用Left(),或者用诸如Nz()之类的东西明确地处理Null。

left$()将返回一个字符串,如果传递NULL则会生成一个错误

left()将返回一个字符串或NULL,如果传递NULL则返回NULL

更多关于Null的信息: http://allenbrowne.com/casu-11.html


3
唯一的区别在于 Left 接受Null,而 Left $ 不接受。

如果传递一个字符串,则 两者 都返回一个字符串。 VarType: vbString

如果传递Null, Left 返回Null值。 VarType: vbNull

它们以相同的速度运行,约为每秒12百万次迭代,因此并不重要。实际上,如果记录了许多样本,则Left在平均情况下比Left $快一部分。

因此,简而言之:如果您希望在参数值为Null时引发错误,请使用Left $,否则请节省输入。


2
Left$ 强制您将字符串视为字符串,这迫使您在将其传递给需要 String 的内容之前及早处理 NULL 值,并导致 类型不匹配无效使用 null 错误。 "节省打字" 的建议也适用于 "在传递值到函数和过程时依赖隐式类型转换并使用 Variant 而不是 String。我不能同意这一点。 - Mathieu Guindon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接