2

MYSQL で部分的な一致を行うことは可能ですが、これが通常行われる方法とは逆になります..

IE チェック用のウェブサイトを持っています.... バウチャー コード

ユーザーが「WUD092050549E」と入力して検索をヒット

データベースに返してもらいたい... column_x が一致する任意の行

  • "WUD092050549E" - 完全一致

  • "WUD0920" - 7 文字一致

  • "WUD0" - 4 文字一致

だがしかし

  • "WUD039540" - 4 文字一致、その後不正解

  • "123213WUD092050549E2334" - 間違った文字、その後一致

基本的に、行が 4 文字以上 (同じシーケンスで) 間違いなく一致する場合

完全一致は次の方法で実現できることを知っています.. "SELECT * WHERE column_x="WUD092050549E"

私自身、理想的には正確な一致をソートしたいのですが、他の正確でない一致が見つからない場合は (おそらく 2 つのクエリ)

4

2 に答える 2

0

どうですか:

SELECT 1 from DUAL 
WHERE column_x LIKE 'WUD092050549E%'
or INSTR('WUD092050549E', column_x ) > 0

こちらでチェックできます

于 2012-08-31T22:20:48.687 に答える
0

何の仕様かは不明。

全体の一致、最初の 7 文字、または最初の 4 文字を確認する場合は、次のようにします。

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

しかし、私は仕様を理解しているかどうかわからないので、これはあなたが探しているものとはかけ離れているかもしれません.

于 2012-08-31T22:32:14.207 に答える