Как избежать ошибок в запросе синтаксического анализа Access - PullRequest
2 голосов
/ 27 сентября 2011

Я пытаюсь очистить данные в более старой базе данных, и поле FirstName было загрязнено отчествами и инициалами на протяжении многих лет. Используя простой левый-средний запрос, я легко могу разделить имена на пробелы. Но у меня возникают проблемы, когда я пытаюсь избежать возврата #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, чтобы просто получить записи, где есть пробел. Я просто забыл что-то очевидное здесь?

1 Ответ

0 голосов
/ 27 сентября 2011

Это должно сработать:

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, потому что это единственная версия, которую я установил на эту машину)

...