高级 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', '.'), '$')
.
这是我现在的例子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', '.'), '$')
.