MYSQL部分匹配....你的想法

时间:2012-08-31 22:17:33

标签: mysql

在MYSQL中是否可以进行部分匹配,但与通常的方式完全相反:

I.E我有一个网站用于检查....凭证代码

用户键入“WUD092050549E”并点击搜索

我希望数据库返回...与column_x匹配的任何行

  • “WUD092050549E” - 完全匹配

  • “WUD0920” - 7个字符匹配

  • “WUD0” - 4个字符匹配

但不是

  • “WUD039540” - 4个字符匹配,然后不正确

  • “123213WUD092050549E2334” - 字符不正确,然后匹配

基本上,行匹配4个或更多字符(在同一序列中),没有错误

我知道确切的匹配可以通过..“SELECT * WHERE column_x =”WUD092050549E“

对于我自己,我理想地想要对完全匹配进行排序,然后如果没有找到其他不太准确的匹配(那么可能是两个查询)

2 个答案:

答案 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))

但我不确定我是否理解规范,所以这可能与你想要的不同。