Я получаю странные ответы с регулярным выражением с setlist на MySQL - PullRequest
0 голосов
/ 06 октября 2019

У меня 3 ученика с фамилией «ким» (seolhyun kim, irene kim и jisoo kim) в моей таблице учеников, и я создал столбец student_name, который состоит из полного имени ученика. Когда я пытаюсь получить имя конкретного учащегося, используя регулярное выражение и сет-лист [], я не получаю имя, которое мне нужно, из этих 3.

Когда я использую «где имя-студента regexp» [seolh] kim'; ", Вместо Сольхён Ким возвращаются имена Ирен Ким и Джисоо Ким. Если я просто использую «где student_name regexp '[se] kim';», будет возвращено имя Ирен Ким, и если я использую полное имя Seolhyun «где student_name regexp '[seolhyun] kim';», получится имя всех 3 женщинвернулся.

SELECT roll_number, student_name
FROM student
WHERE student_name REGEXP '[SE] KIM';

Ответы [ 2 ]

1 голос
/ 06 октября 2019

Я бы порекомендовал начать с:

WHERE student_name REGEXP '(seolhyun|irene|jisoo) KIM';

Это проверяет три имени. Если вам нужно полное совпадение строк (что кажется вероятным), используйте:

WHERE student_name REGEXP '^(seolhyun|irene|jisoo) KIM$';

Если вы хотите сопоставить только одно имя, используйте =:

WHERE student_name = 'seolhyun KIM'

Для более чем одного имени, вот два предложения:

WHERE student_name IN ('seolhyun KIM', 'irene KIM')
WHERE student_name REGEXP '^(seolhyun|irene) KIM$';
1 голос
/ 06 октября 2019

[seolh] означает одну из букв s, e, o, l или h.

То есть [seolh] kim соответствует человеку с фамилией kim и именем, которое заканчивается на одной из этих букв.

Ирэн оканчивается на e, а Josoo оканчивается на o, поэтому они совпадают. Seolhyun оканчивается на n, поэтому он не совпадает.

Возможно, вы захотите (seolh\S*) kim

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...