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

时间:2011-09-26 20:35:18

标签: sql ms-access ms-access-2007

我正在尝试清理旧数据库中的数据,并且FirstName字段已被中间名称&多年来的首字母缩写。使用简单的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返回为null。

在这两种情况下,Access都会返回语法错误(缺少运算符)。基本的Left-Mid查询可以独立工作,我可以传递一个WHERE来获取有空格的条目。我只是忘了这里明显的东西吗?

1 个答案:

答案 0 :(得分:0)

这应该可以解决问题:

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,因为这是我在这台机器上安装的唯一版本)