高级 MySQL 模式匹配(超越 LIKE...%)

Advanced MySQL pattern matching (beyond LIKE...%)

这是我现在的例子MySQLmy_table...

 id          name       code
 1           111        XXXX123456XXXXXXXXXXXXXX
 2           222        XXXX133456XXXXXXX5XXXXXX
 3           333        XXXX123454XXX11XXXXXXABC

代码是 24 个字符的十六进制值,其中 X 是通配符。

我需要编写一个查询,该查询将 return 基于没有通配符值 X 的 CODE 的名称。 给定的 CODE 值将是准确的,但它应该比较字符串,X 可以匹配任何字符。

例如:

SELECT name FROM my_table where code = '012312345611111111111111';

 name
 111

SELECT name FROM my_table where code = '000013345622222225123456';

 name
 222

SELECT name FROM my_table where code = '000123454ABC11234567FABC';

 name
 333

您可以为此使用 like。您知道 _ 通配符吗?

select t.*
from t
where @YourCode like replace(t.code, 'X', '_');

当然,你也可以使用正则表达式。正则表达式为:concat('^', replace(t.code, 'X', '.'), '$').