避免访问名称解析查询中的错误
问题描述:
我试图清理旧数据库中的数据,并且名字字段多年来一直受中间名&首字母的污染。使用简单的Left-Mid查询,我可以轻松地将空间名称分开。但是,当我试图避免在实际上只有名字的条目上返回#ERROR时,我遇到了问题。避免访问名称解析查询中的错误
我试过使用NULLIF。想法是,如果名称中没有空格,则返回NULL作为中间名,并将整个字符串传递给FName。
SELECT MID([FirstName], NULLIF(INSTR([FirstName], " "), 0) AS [MName],
LEFT([FirstName], ISNULL(NULLIF(INSTR([FirstName], " "), 0),
LEN([FirstName])) AS [FName]
FROM Persons;
我也使用IIF语句尝试 - 如果在名称中有空格,然后解析它,否则返回MNAME为空。
在这两种情况下,Access都会返回一个语法错误(缺少运算符)。基本的Left-Mid查询是独立工作的,我可以传递一个WHERE来获取有空间的条目。我在这里忘了一些明显的东西吗?
答
这应该做的伎俩:
SELECT
IIF(INSTR(FirstName," ")>0, MID(FirstName, INSTR(FirstName," ")), null) AS MName,
LEFT(FirstName, IIF(INSTR(FirstName," ")>0, INSTR(FirstName," "), LEN(FirstName))) AS FName
FROM
Persons;
老实说,我从来没有听说过NULLIF
。我只是搜索它,我只发现了SQL Server引用。
您确定这在MS Access中可用吗?
(我不得不承认 - 我只能在A2000现在尝试,因为这是我已经安装的唯一版本在本机上)
谢谢!那就是诀窍。 – briank
对不起 - 忽略回答你的问题的第二部分。我认为NULLIF将在Access 2007中工作,但我不完全确定。我想当我在SQL Server上使用它之前。 – briank
IfNull()存在于其他SQL方言中,但不存在于Jet/ACE/Access中。 –