我正在尝试清理旧数据库中的数据,并且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来获取有空格的条目。我只是忘了这里明显的东西吗?
答案 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,因为这是我在这台机器上安装的唯一版本)