Найти и заменить '000L' во всех строках - PullRequest
1 голос
/ 04 апреля 2019

Я пытаюсь удалить определенные буквы из номеров деталей, но у меня возникают трудности при попытке заставить его работать правильно.

Это то, где я сейчас нахожусь.Это не работает.

SELECT REPLACE(`part`, '[0-9]L', '') FROM `table` WHERE (`part ` LIKE '%[0-9]L')

По сути, скажите, что у меня есть эти пять предметов:

D39J02GEN 20F934L 2984CPL29048L20GEN 1120934L

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

Редактировать: это близко:

SELECT * FROM `table ` WHERE `part` REGEXP '^[0-9].*L';

, но все еще показывает те, где есть что-то после L. Это также не ближе к удалению буквы L.

Ответы [ 2 ]

2 голосов
/ 04 апреля 2019

Если вы знаете, что значение находится в конце, выполните:

SELECT LEFT(part, LENGTH(part) - 2)
FROM `table`
WHERE part REGEXP '[0-9]L$';

Это было бы намного сложнее, если бы рисунок был в середине строки.

1 голос
/ 04 апреля 2019

Нечто подобное должно также работать, если в конце текста всегда требуется соответствие.

Запрос

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                                              |

Вот демоверсия , чтобы увидеть результаты выше для себя.

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