Использование регулярных выражений для возврата отдельных записей - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть таблица базы данных с несколькими записями транзакций, столбец которой «получатель платежа» содержит записи такого типа:

"DIRECT DEBIT PAYMENT TO AXA INSURANCE UK REF 551"<br>
"DIRECT DEBIT PAYMENT TO AXA INSURANCE UK REF 552"<br>
"DIRECT DEBIT PAYMENT TO AXA INSURANCE UK REF 554"<br>
"DIRECT DEBIT PAYMENT TO VODAFONE LIMITED REF 14"<br>
"DIRECT DEBIT PAYMENT TO VODAFONE LIMITED REF 15"<br>
"DIRECT DEBIT PAYMENT TO VODAFONE LIMITED REF 16"<br>
"DIRECT DEBIT PAYMENT TO GOOGLE IRELAND LTD REF 723"<br>
"DIRECT DEBIT PAYMENT TO GOOGLE IRELAND LTD REF 724"<br>
"DIRECT DEBIT PAYMENT TO GOOGLE IRELAND LTD REF 725"<br>

Я бы хотел запросить таблицу таким образом, чтобы получить этот список « "" получатель платежа ":

"AXA INSURANCE UK"<br>
"VODAFONE LIMITED"<br>
"GOOGLE IRELAND LTD"<br>

Мой лог c предполагает, что я могу выполнить запрос" отдельного "типа, включающий регулярное выражение в столбце" получатель ", но я изо всех сил.

Спасибо, НБК. Вот соответствующая строка кода:
$query1 = mysql_query ("SELECT DISTINCT TRIM(REPLACE(SUBSTRING_INDEX(payee,'REF',1),'DIRECT DEBIT PAYMENT TO','')) FROM transactions", $Link); ..., которая дает пустые результаты.

Когда я использую этот запрос, я получаю набор данных, который я опубликовал выше: $query1 = mysql_query ("SELECT DISTINCT payee FROM transactions WHERE date <= '$today' AND date >= '$backDate' and (payee like 'direct debit%' || payee LIKE '%standing order%') ORDER BY payee", $Link);

1 Ответ

1 голос
/ 03 апреля 2020

Вы можете использовать SUBSTRING_INDEX , чтобы исключить REF и число, и REPLACE равное начало

CREATE TABLE table1 (
  `atext` VARCHAR(52)
);

INSERT INTO table1
  (`atext`)
VALUES
  ('DIRECT DEBIT PAYMENT TO AXA INSURANCE UK REF 551'),
  ('DIRECT DEBIT PAYMENT TO AXA INSURANCE UK REF 552'),
  ('DIRECT DEBIT PAYMENT TO AXA INSURANCE UK REF 554'),
  ('DIRECT DEBIT PAYMENT TO VODAFONE LIMITED REF 14'),
  ('DIRECT DEBIT PAYMENT TO VODAFONE LIMITED REF 15'),
  ('DIRECT DEBIT PAYMENT TO VODAFONE LIMITED REF 16'),
  ('DIRECT DEBIT PAYMENT TO GOOGLE IRELAND LTD REF 723'),
  ('DIRECT DEBIT PAYMENT TO GOOGLE IRELAND LTD REF 724'),
  ('DIRECT DEBIT PAYMENT TO GOOGLE IRELAND LTD REF 725');
✓

✓
SELECT DISTINCT TRIM(REPLACE(SUBSTRING_INDEX(atext,'REF',1),'DIRECT DEBIT PAYMENT TO','')) FROM table1;
| TRIM(REPLACE(SUBSTRING_INDEX(atext,'REF',1),'DIRECT DEBIT PAYMENT TO','')) |
| :------------------------------------------------------------------------- |
| AXA INSURANCE UK                                                           |
| VODAFONE LIMITED                                                           |
| GOOGLE IRELAND LTD                                                         |

дБ <> скрипка здесь

...