Mysql
MySQL:如何將數據與正則表達式字元串匹配
我的表中有一個郵政編碼列,其中包含,
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 的明確格式(用百分號替換星號)。