2015-10-27 3 views
0

Я использую Microsoft Access 2013SQL Как расширенный CMD

мне нужно сделать запрос таким образом, что программа может захватить фамилию NAME актёра, когда имя актёра имеет свое полное имя, например, Келли Garman и Странный Аль-Янкович. Yankovic имеет 3 значения, а Garman имеет 2 значения. Любая помощь?

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

Его также запрос, в который пользователь вводит что-то, когда его спрашивают.

Столбцы в базе данных находятся в ЗЕЬЕСТЕ

SELECT [RECORD #], [ACTOR'S NAME], [PRODUCTION NAME] 
FROM Actors AS A 
WHERE [A.ACTOR'S NAME] = [What's the last name?] 

Файл базы данных здесь. https://drive.google.com/open?id=0B19CRcQGkXoVTTZpaldDWnFuS28

+0

Ждать, вы хотите * вернуть * имя актера или * поиск по фамилии актера? – Schwern

+0

Да, пользователь должен указать фамилию, а затем все имена будут отображаться в запросе. Например, я вложил в Янкович, и все спектакли, в которых он находился по его фамилии, были заданы вопросом. – computerfreako2

+1

Ваш вопрос нечеткий. Пожалуйста, прочитайте [** Как спросить **] (http://stackoverflow.com/help/how-to-ask) И [** Как создать минимальный, полный и проверенный пример. **] (http : //stackoverflow.com/help/mcve) Нам нужны выборочные данные и желание, чтобы найти ответ быстрее, иначе мы будем тратить время на то, что вам нужно. Вы также можете создать свою схему с данными, используя ** http: //www.sqlfiddle.com** –

ответ

0

Вы можете использовать совпадение шаблонов в предложении WHERE.

PARAMETERS [What's the last name?] Text (255); 
SELECT A.[Record #], A.[ACTOR'S NAME] 
FROM Actors AS A 
WHERE A.[ACTOR'S NAME] ALike '% ' & [What's the last name?]; 
+0

Спасибо, что ответили на мой вопрос. Я не включил строку PARAMETERS, но я включил все остальное, и это работает. Я в восхищенни! Кроме того, A. [ИМЯ АКТЕРА] должно быть [ИМЯ АКТАКТОРА] – computerfreako2

2

Вы можете использовать REVERSE вместе с SUBSTRING, как указано ниже, чтобы узнать фамилию.

REVERSE(SUBSTRING(REVERSE([ACTOR'S NAME]), 1, INSTR(' ', REVERSE([ACTOR'S NAME])) - 1)) 
+1

Я не понимаю SUBSTRING или REVERSE cmd – computerfreako2

+0

@ computerfreako2 Это получает фамилию, ища все после последнего пробела в названии. Тем не менее, многие базы данных SQL имеют только функции для поиска * первого * пространства. Таким образом, Рагхаван искусно изменил название, нашел все до первого места (что действительно является последним), а затем снова изменил его. Однако это все лишнее, потому что MySQL может найти последнее пространство с SUBSTRING_INDEX().[См. Мой ответ] (http://stackoverflow.com/a/33359861/14660). – Schwern

+0

Я искал код MS Access SQL. Удален код mysql. Сожалею! – computerfreako2

2

Чтобы найти фамилию, вам необходимо получить слово после последнего пробела. Вы не можете сделать это непосредственно в MS Access. Вместо этого вы можете найти положение последнего пространства с помощью InstrRev(Name, ' '). Затем используйте Right, чтобы получить все справа от него, но это занимает позицию от конца строки. Чтобы получить это, вычтите то, что вы получили от InstrRev, от длины имени.

SELECT Right(Name, Len(Name) - InstrRev(Name, ' ')) as 'Last Name' 
FROM Actors 
WHERE Right(Name, Len(Name) - InstrRev(Name, ' ')) = 'Yankovic'; 

К сожалению, у меня нет копии MS Access, чтобы проверить это.

+0

Я даже не изучил Лен или InstrRev, поэтому, возможно, мой учитель даже не ищет этого. lol – computerfreako2

+0

Есть ли способ включить пользовательский ввод, чтобы он попросил пользователя ввести фамилию. Есть куча имен базы данных с более чем 10 000 записей – computerfreako2

+0

@ computerfreako2 Извините, я не знаю Access. Я работаю над документацией. – Schwern

Смежные вопросы