使用+将null连接到字符串会导致null

时间:2015-08-09 12:49:49

标签: sql ms-access

我在Access中有以下SQL查询:

SELECT ID, CurrencyName + ' (' + CurrencySymbol + ')' AS [Currency], 
CurrencyLocation, CurrencySymbol FROM Currencies ORDER BY SortOrder

我注意到,除非字段CurrencySymbol保留NULL或为空,否则我会得到一个完整的结果表。如果CurrencySymbol字段为空,而不是连接任何内容,则Access会跳过记录并继续,如下所示

Snapshot of Access

我出错了还是有更好的方法来编写此查询?

2 个答案:

答案 0 :(得分:4)

如果您使用+连接字符串,string + NULL会产生NULL

如果您使用&连接字符串,string & NULL会产生string

因此,您有两种方法可以解决此问题:

选项1:CurrencyName + ' (' + Nz(CurrencySymbol, '') + ')'。 Nz(NullToZero)将Null值转换为第二个参数。

选项2:CurrencyName & ' (' & CurrencySymbol & ')'

您可以使用此事实创建一个表达式,该表达式仅在存在货币符号时显示括号(此构思的信用转到this blog post):

CurrencyName & (' (' + CurrencySymbol + ')')将产生PointsEuro (€)

答案 1 :(得分:3)

这是因为连接字符串和NULL会导致NULL。

SELECT ID, CurrencyName + ' (' + Iif(IsNull(CurrencySymbol), '', CurrencySymbol) + ')'
  AS [Currency], CurrencyLocation, CurrencySymbol
FROM Currencies
ORDER BY SortOrder