Объединить поля имен в запросе Access с помощью IIF() без пробелов?

Во-первых, я новичок. Пожалуйста, имейте это в виду...

Тем не менее, я использовал простую формулу для объединения полей имен в базе данных учащихся в Access с помощью запроса (я использую Access 2013, но должен поддерживать совместимость с Access 2010). Он читается так:

Student Name: IIf(IsNull([Preferred First Name]),[First Name],[Preferred First Name]) & " " & [Last Name]

Который показывает предпочтительное имя и фамилию учащегося или имя и фамилию. Если выясняется, что первое (предпочтительное или заданное) равно нулю и/или последнее равно нулю, очевидно, что там, где это уместно, печатается значение null.

Пример вывода формулы с использованием вымышленных имен

Ну, вот где возникает проблема. Как вы можете видеть в примере, у одного ученика есть только имя Кристина, которое печатается как "Christine ". У другого только фамилия Александр, которая печатается как " Alexander". Он печатает пространство, несмотря ни на что.

Теперь я могу использовать Iif, чтобы обойти это - он используется в образце базы данных следующим образом:

Student Name: IIf(IsNull([Last Name]),IIf(IsNull([First Name]),[First Name]),IIf(IsNull([First Name]),[Last Name],[First Name] & " " & [Last Name]))

Я хочу включить в эту формулу поле «Предпочтительное имя», но я просто не могу понять это. Кажется, это работает в обратном направлении от того, как я бы сказал это в естественной речи, и, похоже, в нем отсутствуют значения. На простом английском языке я представляю это так:

Если [Last Name] имеет значение null, выведите только [Preferred First Name], если только оно не null, и в этом случае выведите только [First Name], если оно также не null, и в этом случае выведите null.
В противном случае если [Last Name] имеет значение, выведите [Preferred Name] & " " & [Last Name], если [Preferred First Name] не равно null, в этом случае выведите [First Name] & " " & [Last Name], если [Имя] также не равно нулю, в этом случае просто напечатайте [Фамилия].

(Чтобы уточнить, иногда бывают случаи, когда мы не можем получить полное имя учащегося, поэтому я не могу просто сделать все поля обязательными, поэтому я хочу убедиться, что он печатается правильно, независимо от того, какие данные доступны.)

Прошу прощения, если это слишком простой вопрос для этого сайта, но, похоже, это лучшее место, где его можно задать. Спасибо за любую помощь.


person Community    schedule 19.10.2015    source источник


Ответы (1)


Вы хотите использовать функцию Trim. Итак, ваша строка будет выглядеть так:

Student Name: Trim(IIf(IsNull([Preferred First Name]),Trim([First Name]),
Trim([Preferred First Name])) & " " & Trim([Last Name]))

Обрежьте каждое отдельное поле (на всякий случай, если данные были введены с дополнительным пробелом или двумя, что иногда случается), а затем обрежьте всю результирующую строку, чтобы также избавиться от пробелов.

person Johnny Bones    schedule 19.10.2015
comment
Я бы даже не подумал использовать Trim — это намного проще и, похоже, работает так, как я ожидал — спасибо за помощь! - person ; 27.10.2015