проверка, есть ли в поле таблицы пробел или запятая - MS-Access - PullRequest
0 голосов
/ 13 декабря 2010

У меня есть таблица с именем FinalForgotten, которая содержит только одно поле с именем aname.Поле может выглядеть как Смит Джон или Смит Джон.Таким образом, фамилия и имя находятся в одном поле и разделены пробелом или запятой.Поле защиты содержит три поля: first_name, last_name, middle_initial.Поле first_name будет содержать данные, которые точно соответствуют фрагменту поля данных IN (например, John).И поле last_name будет содержать данные, которые точно соответствуют фрагменту данных в поле aname (например, Smith).Я пытаюсь получить все записи об имени FinalForgotten со средней инициализацией в новую таблицу (например, Smith, John S)Таблица защиты - это то, что имеет этот средний инициал.

Это будет работать:

SELECT left([aname],InStr(1,[aname],",")-1) & " "& right([aname],Len(aname)-InStr(1,[aname],",")) & " "& summary_judgment.middle_initial AS fullnameINTO FinalForgottenWithMiddle FROM FinalForgotten INNER JOIN summary_judgment ON((left(FinalForgotten.aname,InStr(1,FinalForgotten.[aname],",")-1))=summary_judgment.last_name) AND((right(FinalForgotten.aname,Len(FinalForgotten.aname)-InStr(1,FinalForgotten.[aname],","))=summary_judgment.first_name));

Но он вернет «недопустимый вызов процедуры», если FinalForgotten содержит поле без запятой.например: Смит Джон.

Поэтому, чтобы решить эту проблему, я попытался определить, была ли запятая в поле или нет:

SELECT left([aname], IIF(instr([aname], ",") = 0, InStr(1,[aname]," ")-1),InStr(1,[aname],",")-1)  &  ", "  & right([aname], IIF(instr([aname], ",") = 0,Len(aname)-InStr(1,[aname]," "),Len(aname)-InStr(1,[aname],",") &  " " & defense_final.middle_initial AS fullname INTO FinalForgottenWithMiddle
FROM FinalForgotten INNER JOIN defense_final ON 
((right(FinalForgotten.aname,IIF(instr([aname], ",") = 0,Len(FinalForgotten.aname)-InStr(1,FinalForgotten.[aname]," ")),Len(FinalForgotten.aname)-InStr(1,FinalForgotten.[aname],","))=defense_final.first_name)) 
AND 
((left(FinalForgotten.aname,,IIF(instr([aname], ",") = 0,InStr(1,FinalForgotten.[aname]," ")-1)),InStr(1,FinalForgotten.[aname],",")-1))=defense_final.last_name);

Это дает мне ошибку «отсутствует синтаксис оператора»и выделяет слово AS.

Спасибо за ответ.

1 Ответ

0 голосов
/ 13 декабря 2010

Кажется, что достаточно много пропущенных скобок.

SELECT left(
      [aname], 
      IIF(instr([aname], ",") = 0,
        InStr(1,[aname]," ")-1,
        InStr(1,[aname],",")-1
        ) 
      )
    &  ", "  & 
    right(
       [aname], 
       IIF(instr([aname], ",") = 0,
         Len(aname)-InStr(1,[aname]," "),
         Len(aname)-InStr(1,[aname],",") 
         )
        )
     &  " " & 
    defense_final.middle_initial AS fullname 
INTO FinalForgottenWithMiddle
FROM FinalForgotten
INNER JOIN defense_final 
ON 

    right(FinalForgotten.aname,
     IIF(instr([aname], ",") = 0,
     Len(FinalForgotten.aname)-InStr(1,FinalForgotten.[aname]," "),
     Len(FinalForgotten.aname)-InStr(1,FinalForgotten.[aname],",")
      )
     )=defense_final.first_name

AND 

   left(FinalForgotten.aname,
    IIF(instr([aname], ",") = 0,
      InStr(1,FinalForgotten.[aname]," ")-1,
      InStr(1,FinalForgotten.[aname],",")-1
        )
    )=defense_final.last_name
...