MySQL совпадение на подмножестве строк - PullRequest
0 голосов
/ 05 сентября 2011

со столом:

idx | int | ident
1   | 10  | Foo 001_10
2   | 10  | Farfoo 002_11
3   | 11  | Sofoo 001_11
4   | 10  | Lafoo 001_10
5   | 10  | MoreFoo 001_11

Как выбрать все строки, в которых последние 2 символа в строке «идент» не соответствуют целому числу в колонке «int»? Что для приведенной выше таблицы будет:

2   | 10  | Farfoo 002_11
5   | 10  | MoreFoo 001_11

Ответы [ 4 ]

2 голосов
/ 05 сентября 2011

Вы должны использовать функцию SUBSTRING , у вас будет что-то подобное

SELECT * FROM table WHERE SUBSTRING(ident, -2) != int

Но я не уверен, что это лучший способ достичь своей цели. Подстрока может быть очень дорогим методом для MySQL, может быть, кто-то знает более быстрый и лучший метод.

Вот лучший способ, который позволяет вам получить все после последнего _, потому что я не уверен, что вы всегда будете иметь две цифры после _. Для этого случая я использую SUBSTRING_INDEX .

SELECT * FROM table WHERE SUBSTRING_INDEX(ident, '_', -1) != int

1 голос
/ 05 сентября 2011
SELECT idx, `int`, `ident` FROM table WHERE SUBSTRING(`ident`, -2, 2) != `int`;
0 голосов
/ 05 сентября 2011

Вы также можете использовать RIGHT строковую функцию, используя right(ident,2), вы получите последние две цифры из строки, затем сравните ее с столбцом int, если оба значения не равны, затем получите несоответствующиесодержание.

select * from tablename
where RIGHT(ident,2) != int;
0 голосов
/ 05 сентября 2011
select * from whatever where not ident like concat('%', cast `int` as varchar);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...