2012-02-20 7 views
1

私は、次の値部分的なFROM ... TO値を持つレコードの検索方法?

! # ! FROM ! TO ! 
!===!======!======= 
! 1 ! aaaa ! aabb ! 
! 2 ! aa10 ! aa2a ! 
! 3 ! bb ! cc ! 
! 4 ! bb 20! bb 30! 
! 5 ! bccc ! bccd ! 
FROM

と任意の範囲に及ぶことができますのあるDBを持っています。サポートされているすべての文字は許可されます。 FROMとTOは異なる長さを持つことができます。 DBの行数は約800,000です。行には、ユースケースにとって重要な列があります。

オートコンプリートフィールド私はFROMとTOの間のどこかに一致するすべてのレコードを見つける必要があります。

SELECT * 
FROM table WHERE (
    '11' BETWEEN from AND to 
) 

は、残念ながら、これは1105年= FROMために一致して= 1110にしません:

私はこのような何かを試してみました。

この外観の正しいクエリはどうでしょうか?

+0

bb'と 'cc'は 'B'は、あなたの出力には、その行と一致する理由を確認してくださいB''後の両方である、そうではない '、標準アルファベット順のソートを仮定。入力をFROM値とTO値にどの程度マッピングする予定ですか? –

+0

あなたの例は非常に曖昧で、注文は信頼できるパターンに従っていないようですが、目的を明確にすることはできますか? –

+0

ユーザーが 'b'を入力すると、 'b'で始まるすべての行と 'b'で始まるFROMとTOの間の可能な値を持つすべての行が一致する必要があります。 – BetaRide

答えて

0

編集:質問はので、私はとにかく0時だので、答えを交換:)

あなたが望むことのようなものである、ビットを変更しました。

あなたが探している文字列とその長さを知っていればもちろん
SELECT * FROM table1 WHERE 'b' 
    BETWEEN SUBSTR(`FROM`, 1, CHAR_LENGTH('b')) 
     AND `TO`; 

、あなたが実際にCHAR_LENGTH()を置き換えることができます(「B」という文字列が、それは問題で二度述べています注意し、検索しました)コード。

デモhere

+0

ご協力いただきありがとうございます。残念ながら、私はそれが何をしているのか分かりません。 – BetaRide

+0

@BetaRide 2番目の考えでは、私はそれがあなたが望む2番目の、より単純なバージョンだと思う。それが本当に最初の場合、私はいくつかの説明を追加することができます。 –

+0

改良された質問で述べたように、これは私が探している行の大部分を失います。ほとんどの場合、完全な文字列はありません(実際にはオートコンプリートフィールドのアイデアです)。 – BetaRide

関連する問題