SQL

SQL запрос (like)

Не могу разобраться в следующей теме:
Необходимо вывести имя игрока и его гильдию, фамилия которого начинается с “B” и больше одной буквы.
Если со связыванием двух таблиц путем join я разобрался, то вот с выводом именно фамилии с буквой B не очень. Подскажите как делать ?
P.s. Столбец откуда берутся данные имени, называется nickname. Пример имен в nickname: Alex B , Serena AI, Valdis Kerd.
в каждой избушке свои погремушки, и разные субд позволяют делать шаблоны разной степени замороченности.
в простейшем случае в шаблоне могут быть лишь % (соответствует любой последовательности символов) и _ (соответствует единичному символу).

поэтому для базы:
 CREATE TABLE person (ID int, nickname varchar(32)); 

INSERT INTO person VALUES
(1, 'Alex B'),
(2, 'Serena AI'),
(3, 'Valdis Kerd'),
(4, 'Richard B Wild'),
(5, 'Sammy Boo'),
(6, 'Emma B ');
запрос отработает так:
 SELECT * FROM person WHERE nickname like '% B_%';

ID nickname
4 Richard B Wild
5 Sammy Boo
6 Emma B
поскольку запись с ID=6 нам не подходит, можно обезопасить себя, поудаляв пробелы:
 SELECT * FROM person WHERE TRIM(nickname) like '% B_%'; 

ID nickname
4 Richard B Wild
5 Sammy Boo
но если в nickname напихают что-то отличное от паттерна имя-пробел-фамилия, это не спасёт.

если же и ID=4 нас не устраивает, можно выкрутиться так:
 SELECT * FROM person WHERE TRIM(nickname) like '% B_%'
and TRIM(nickname) not like '% B %';

ID nickname
5 Sammy Boo
но, понятное дело, и этот вариант не охватывает все случаи.

так что, имхо, для подобных задач лучше использовать регулярки, если они, конечно, поддерживаются субд.
АС
Александр Саранцев
82 704
Лучший ответ
сперва собираю данные в базу необдуманно, а потом напрягаются на каждом шагу...

странно что нужно вам "фамилию", но ищете её в "nickname"
Влад Иванов
Влад Иванов
96 382
Андрей Марцинкевич Это задание, не я придумал так собирать