Нечто подобное должно также работать, если в конце текста всегда требуется соответствие.
Запрос
SELECT
*
FROM
t
WHERE
SUBSTRING(REVERSE(t.text_string), 1, 1) = 'L'
AND
SUBSTRING(REVERSE(t.text_string), 2) >> 0 <> 0
Результат
| text_string |
| ----------- |
| 20F934L |
| 1120934L |
см. демо
Примечание
SUBSTRING(REVERSE(t.text_string), 2) >> 0
в основном означает CAST(SUBSTRING(REVERSE(t.text_string), 2) AS UNSIGNED)
здесь
Почему это работает?
Я использую свободную функцию автоматического вещания MySQL, которая может конвертировать 439F02
в INT
439
, но не может конвертировать PC4892
в INT
, он будет конвертирован в 0
См. Приведенный ниже набор результатов на основе запроса
Запрос
SELECT
*
, SUBSTRING(REVERSE(t.text_string), 1, 1)
, SUBSTRING(REVERSE(t.text_string), 2)
, SUBSTRING(REVERSE(t.text_string), 2) >> 0
, SUBSTRING(REVERSE(t.text_string), 2) >> 0 <> 0
FROM
t
Результат
| text_string | SUBSTRING(REVERSE(t.text_string), 1, 1) | SUBSTRING(REVERSE(t.text_string), 2) | SUBSTRING(REVERSE(t.text_string), 2) >> 0 | SUBSTRING(REVERSE(t.text_string), 2) >> 0 <> 0 |
| ----------- | --------------------------------------- | ------------------------------------ | ----------------------------------------- | ---------------------------------------------- |
| D39J02GEN | N | EG20J93D | 0 | 0 |
| 20F934L | L | 439F02 | 439 | 1 |
| 2984CPL | L | PC4892 | 0 | 0 |
| 29048L20GEN | N | EG02L84092 | 0 | 0 |
| 1120934L | L | 4390211 | 4390211 | 1 |
Вот демоверсия , чтобы увидеть результаты выше для себя.