Php MySQL选择单元格值等于数字的行,删除非数字字符

Php MySQL选择单元格值等于数字的行,删除非数字字符,php,mysql,regex,Php,Mysql,Regex,问题:一些产品sku看起来像“67062-4D”或“MOD602-04-N”。所以,任务是在用户使用搜索时按数字查找sku,例如“670624”的“67062-4D”和“12345”的“MOD123-45-N”。 解决方案:我通过在php中重复[^0-9]*1创建一个regexp(php和mysql正在使用)来解决这个问题,但我真的想知道哪里有一个通用的或更自然的解决方案。否则,只需发布此解决方案。 本例发现“MOD123-45-N” 更新: 版本10.1.40-MariaDB您可以使用删除字符

问题:一些产品sku看起来像“67062-4D”或“MOD602-04-N”。所以,任务是在用户使用搜索时按数字查找sku,例如“670624”的“67062-4D”和“12345”的“MOD123-45-N”。
解决方案:我通过在php中重复[^0-9]*1创建一个regexp(php和mysql正在使用)来解决这个问题,但我真的想知道哪里有一个通用的或更自然的解决方案。否则,只需发布此解决方案。 本例发现“MOD123-45-N”

更新:
版本10.1.40-MariaDB

您可以使用删除字符串中的所有非数字字符,然后将其与输入数字进行比较,例如

SELECT product_id WHERE REGEXP_REPLACE(sku, '[^0-9]', '') = '12345'
带有
regexp\u replace():

或找到精确匹配:

select product_id 
from tablename
where regexp_replace(sku, '\\D', '') = search

哪个版本的MySQL?10.1.40-MariaDBYour regex没有做你认为它正在做的事情。还有:我相信是的。反例?我以前从未见过\\D。“\\D”的意思是“[^0-9]”吗?没错,所有不是数字的东西。谢谢,但我只能接受1个answear,我相信Nick是第一个。
select product_id 
from tablename
where regexp_replace(sku, '\\D', '') LIKE concat('%', search, '%')
select product_id 
from tablename
where regexp_replace(sku, '\\D', '') = search