2012-03-01 1 views
3

指定された文字列に一致するアイテム、またはLIKEquery%にSQLiteデータベースを照会する必要があります。しかし、それは私がすべての等しいマッチがLIKE試合前に来る必要が SQL:LIKEの前に等価なものを指定した

SELECT id, type, number FROM roads WHERE number = '12' OR number LIKE '12%' 

ほど単純ではありません。私はそこにどこかに ASが存在し、それによって注文していることを描いていますが、それがどのように機能するかはわかりません。可能であれば、2つのクエリを作成しないでください。

+1

彼らは常に同じ文字列であれば、あなただけの '行うcoulnd't長さ(数)で注文する '? – mindandmedia

+0

ああ、それはうまくいくかもしれない、それ?常に同じ文字列になるとは限りませんが、 '= '条件を省略するだけです。 – Jonah

+0

それから、あなたのサンプルを 'WHERE number = '114'や'12% 'のような数字に変更して、それをもっと挑戦的にする(編集:cadeの解決策はまだチェックアウトする) – mindandmedia

答えて

3

私はこの構文はSqliteをでサポートされているかどうかわからないんだけど、ここでアイデアです:

SELECT id, type, number FROM roads WHERE number LIKE '12%' 
ORDER BY 
    CASE 
     WHEN number = '12' THEN 0 
     ELSE 1 
    END 
+0

それは答えのように見えます、私はそれを試してみます。 – Jonah

+0

それは生きる!ありがとう:) – Jonah

+0

@ジョナ - 喜んで助ける。 – dcp

4
SELECT id, type, number 
FROM roads 
WHERE number = '12' OR number LIKE '12%' 
ORDER BY CASE WHEN number = '12' THEN 0 ELSE 1 END, number 
1
SELECT id, type, number 
    FROM roads 
    WHERE number = '12' 
UNION 
SELECT id, type, number 
    FROM roads 
    WHERE number LIKE '12%' 
     AND NOT EXISTS (SELECT id, type, number 
          FROM roads 
          WHERE number = '12'); 
+0

この方法を使用する利点は何ですか? – Jonah

+0

"LIKE"が一致する前に来るすべての等しい一致は、 "一致するものがない場合にのみLIKEが一致するようにします。したがって、利点は、より少ないデータをターゲットにすることができますが、要件を満たしている場合のみです。 – onedaywhen

関連する問題