使用正则表达式 return 不同的记录
Using regex to return distinct records
我有一个包含多个交易记录的数据库 table,其 'payee' 列包含以下类型的条目:
"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>
我想查询 table 以获取 "distinct" 'payee's:
的列表
"AXA INSURANCE UK"<br>
"VODAFONE LIMITED"<br>
"GOOGLE IRELAND LTD"<br>
我的逻辑假设我可以执行一个 "distinct" 类型的查询,在 'payee' 列上包含一个正则表达式,但我正在努力。
谢谢nbk。这是相关的代码行:
$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);
可以用SUBSTRING_INDEX to eliminate the REF and number , and 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 |
db<>fiddle here
我有一个包含多个交易记录的数据库 table,其 'payee' 列包含以下类型的条目:
"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>
我想查询 table 以获取 "distinct" 'payee's:
的列表"AXA INSURANCE UK"<br>
"VODAFONE LIMITED"<br>
"GOOGLE IRELAND LTD"<br>
我的逻辑假设我可以执行一个 "distinct" 类型的查询,在 'payee' 列上包含一个正则表达式,但我正在努力。
谢谢nbk。这是相关的代码行:
$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);
可以用SUBSTRING_INDEX to eliminate the REF and number , and 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 |
db<>fiddle here