在MYSQL中是否可以进行部分匹配,但与通常的方式完全相反:
I.E我有一个网站用于检查....凭证代码
用户键入“WUD092050549E”并点击搜索
我希望数据库返回...与column_x匹配的任何行
“WUD092050549E” - 完全匹配
“WUD0920” - 7个字符匹配
“WUD0” - 4个字符匹配
但不是
“WUD039540” - 4个字符匹配,然后不正确
“123213WUD092050549E2334” - 字符不正确,然后匹配
基本上,行匹配4个或更多字符(在同一序列中),没有错误
我知道确切的匹配可以通过..“SELECT * WHERE column_x =”WUD092050549E“
对于我自己,我理想地想要对完全匹配进行排序,然后如果没有找到其他不太准确的匹配(那么可能是两个查询)
答案 0 :(得分:0)
怎么样:
SELECT 1 from DUAL
WHERE column_x LIKE 'WUD092050549E%'
or INSTR('WUD092050549E', column_x ) > 0
您可以查看HERE
答案 1 :(得分:0)
目前尚不清楚规范是什么。
如果要检查整个匹配项,前七个字符或前四个字符:
SELECT t.voucher_code='WUD092050549E' AS exact_match
, t.*
FROM mytable t
WHERE t.voucher_code = 'WUD092050549E'
OR t.voucher_code = LEFT('WUD092050549E',7)
OR t.voucher_code = LEFT('WUD092050549E',4)
如果您想要任何长度的优惠券代码匹配,您可以列举所有可能性:
SELECT t.voucher_code = 'WUD092050549E' AS exact_match
, t.*
FROM mytable t
WHERE t.voucher_code = 'WUD092050549E'
OR t.voucher_code = LEFT('WUD092050549E',11)
OR t.voucher_code = LEFT('WUD092050549E',10)
OR t.voucher_code = LEFT('WUD092050549E',9)
OR t.voucher_code = LEFT('WUD092050549E',8)
OR t.voucher_code = LEFT('WUD092050549E',7)
OR t.voucher_code = LEFT('WUD092050549E',6)
OR t.voucher_code = LEFT('WUD092050549E',5)
OR t.voucher_code = LEFT('WUD092050549E',4)
更慢,但更简洁:
SELECT t.voucher_code
, t.*
FROM mytable t
WHERE t.voucher_code = LEFT('WUD092050549E',CHAR_LENGTH(t.voucher_code))
但我不确定我是否理解规范,所以这可能与你想要的不同。