避免访问名称解析查询中的错误

避免访问名称解析查询中的错误

问题描述:

我试图清理旧数据库中的数据,并且名字字段多年来一直受中间名&首字母的污染。使用简单的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现在尝试,因为这是我已经安装的唯一版本在本机上)

+0

谢谢!那就是诀窍。 – briank

+0

对不起 - 忽略回答你的问题的第二部分。我认为NULLIF将在Access 2007中工作,但我不完全确定。我想当我在SQL Server上使用它之前。 – briank

+0

IfNull()存在于其他SQL方言中,但不存在于Jet/ACE/Access中。 –