Mysql

MySQL:如何將數據與正則表達式字元串匹配

  • October 12, 2020

我的表中有一個郵政編碼列,其中包含,AB45*等值。RD4*``ADB567

現在我想將我的數據與此列匹配。這*意味著以 開頭的字元串AB45應與此列匹配。如果我使用AB45 45D它應該獲取包含的行AB45*

如果我RD489在我的欄位上使用,它應該與RD4*列值匹配。

我可以用什麼來實現這個要求?

CREATE TABLE patterns (pattern VARCHAR(16));
INSERT INTO patterns VALUES ('ABC4*'), ('RDTU22*');
SELECT * FROM patterns;
| 圖案 |
| :------ |
| ABC4* |
| RDTU22* |
CREATE TABLE values_to_check (val VARCHAR(255));
INSERT INTO values_to_check VALUES ('ABC41'), ('ABC49'), ('RDTU225'), ('RDTU229');
SELECT * FROM values_to_check;
| 值 |
| :------ |
| ABC41 |
| ABC49 |
| RDTU225 |
| RDTU229 |
SELECT values_to_check.val, patterns.pattern
FROM values_to_check
JOIN patterns ON values_to_check.val LIKE REPLACE(patterns.pattern, '*', '%');
值 | 圖案
:------ | :------
ABC41 | ABC4* 
ABC49 | ABC4* 
RDTU225 | RDTU22*
RDTU229 | RDTU22*
SELECT values_to_check.val, patterns.pattern, 
       values_to_check.val LIKE REPLACE(patterns.pattern, '*', '%') does_they_match
FROM values_to_check
JOIN patterns;
值 | 圖案 | do_they_match
:------ | :------ | --------------:
ABC41 | ABC4* | 1
ABC41 | RDTU22* | 0
ABC49 | ABC4* | 1
ABC49 | RDTU22* | 0
RDTU225 | ABC4* | 0
RDTU225 | RDTU22* | 1
RDTU229 | ABC4* | 0
RDTU229 | RDTU22* | 1

db<>在這裡擺弄

PS。REPLACE() 將模式轉換為 LIKE 的明確格式(用百分號替換星號)。

引用自:https://dba.stackexchange.com/questions/276912