2011-09-26 43 views
2

我試圖清理舊數據庫中的數據,並且名字字段多年來一直受中間名&首字母的污染。使用簡單的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來獲取有空間的條目。我在這裏忘了一些明顯的東西嗎?

回答

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現在嘗試,因爲這是我已經安裝的唯一版本在本機上)

+0

謝謝!那就是訣竅。 – briank

+0

對不起 - 忽略回答你的問題的第二部分。我認爲NULLIF將在Access 2007中工作,但我不完全確定。我想當我在SQL Server上使用它之前。 – briank

+0

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