Как использовать регулярные выражения в MySQL запрос, чтобы удалить определенные символы?

0

В моем запросе я использую REPLACE( b.DESCRIPTION,'SP. Z OO','') AS DESCRIPTION для удаления SP. Z OO SP. Z OO эти символы из столбцов. И, надеюсь, это работает на меня. Но в моей базе данных SP. Z OO SP. Z OO эти символы хранятся по-разному. Как sp. Zoo sp. Zoo, SP. zoo SP. zoo и т.д. Где-то он хранится заглавными буквами и где-то хранится маленькими буквами. REPLACE( b.DESCRIPTION,'SP. Z OO','') AS DESCRIPTION этим методом Я могу только удалить заглавные буквы. Я хочу, чтобы все условия удаляли подобные слова. Как применить регулярное выражение или случай в этой ситуации?

Это мой запрос:

SELECT b.TRANS_DETAILS_ID, b.CREDIT_AMOUNT, b.ENTITY_NAME, REPLACE (b.DESCRIPTION, 'SP. Z OO', '') AS DESCRIPTION, DATE_FORMAT (a.TRANSACTION_DATE_TIME, '% d-% m-% Y') AS TRANS_DATE FROM bank_book_transaction_master a, bank_book_transaction_details b WHERE a.TRANSACTION_DATE_TIME BETWEEN '2017-12-01' AND '2017-12-26' AND DEBIT_CREDIT_FLAG = 1 AND a.ORG_ID = '53' AND a.BANK_ID = '14' И a.TRANSACTION_ID = b.TRANS_MASTER_ID

Теги:
case

2 ответа

0
Лучший ответ

Вы можете сделать это с помощью такого запроса:

UPDATE strtest
 SET mystring = CONCAT( 
         LEFT (mystring, POSITION('SP. Z O.O.' IN  mystring)-1),
         RIGHT(mystring, LENGTH(mystring)-POSITION('SP. Z O.O.' IN  mystring)-9)
         )
WHERE mystring LIKE '%SP. Z O.O.%';

Образец:

Таблица испытаний

MariaDB [bernd]> SELECT * from strtest;
+----+------------------+
| id | mystring         |
+----+------------------+
|  1 | SP. Z O.O.       |
|  2 | ABCSP. Z O.O.    |
|  3 | SP. Z O.O.XYZ    |
|  4 | QWESP. Z O.O.IOP |
|  5 | AAASp. Z o.O.LLL |
+----+------------------+
5 rows in set (0.00 sec)

Удалите строку в SELECT (>>> <<< только для теста)

MariaDB [bernd]> SELECT CONCAT( '>>>',
    ->            LEFT (mystring, POSITION('SP. Z O.O.' IN  mystring)-1),
    ->          RIGHT(mystring, LENGTH(mystring)-POSITION('SP. Z O.O.' IN  mystring)-9),
    ->          '<<<') AS resultstring
    ->        FROM strtest;
+--------------+
| resultstring |
+--------------+
| >>><<<       |
| >>>ABC<<<    |
| >>>XYZ<<<    |
| >>>QWEIOP<<< |
| >>>AAALLL<<< |
+--------------+
5 rows in set (0.00 sec)

ОБНОВИТЬ таблицу

MariaDB [bernd]> UPDATE strtest
    ->  SET mystring = CONCAT(
    ->            LEFT (mystring, POSITION('SP. Z O.O.' IN  mystring)-1),
    ->          RIGHT(mystring, LENGTH(mystring)-POSITION('SP. Z O.O.' IN  mystring)-9)
    ->          )
    -> WHERE mystring LIKE '%SP. Z O.O.%';
Query OK, 5 rows affected (0.00 sec)
Rows matched: 5  Changed: 5  Warnings: 0

MariaDB [bernd]> SELECT * from strtest;
+----+----------+
| id | mystring |
+----+----------+
|  1 |          |
|  2 | ABC      |
|  3 | XYZ      |
|  4 | QWEIOP   |
|  5 | AAALLL   |
+----+----------+
5 rows in set (0.00 sec)

MariaDB [bernd]>
0

Если вы используете MariaDB, вы можете использовать REGEXP_REPLACE(), как в следующей строке:

REGEXP_REPLACE(col, regexp, replace)

Здесь вы найдете примеры об использовании.

  • 0
    Остерегайтесь подстановочной природы . ,

Ещё вопросы

Сообщество Overcoder
Наверх
Меню