2015-08-09 52 views
5

我有以下SQL查询中访问:使用空+结果串联空字符串

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

我注意到的是,我得到的结果的全表,除非如果字段CurrencySymbolNULL或空。如果CurrencySymbol字段为空,而不是连接任何内容,Access跳过记录并继续如下所示

Snapshot of Access

我弄错了什么或有没有更好的方式来写这个查询?

+1

尝试使用'&'而不是'+'作为连接运算符。当涉及到空值时,它们的行为会有所不同。您可能还想看看Format()函数。 –

回答

4

如果连接字符串与+string + NULL产生NULL

如果连接字符串与&,string & NULL得到string

因此,你有两个选择,以解决此问题:

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

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

你可以利用这一点来创建一个只显示括号内的表达式时的货币符号的存在(贷记这个想法去this blog post):

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

+0

哦,我以为连接只能用'+'我不知道'&'是一个选项 –

+2

'&'是一个明确的* string *连接运算符。所以,'3 + 4'产生'7',但'3&4'产生''34“'。 – Heinzi

3

这是因为连接字符串和NULL结果为NULL。

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

经过一些修改,我得到了我希望第一次格式化的方式。谢谢! –