4

用途: ユーザーは、特定の順序で表示される「RG20」などの部分的な郵便番号を検索します。クエリは、データベース内の郵便番号の例が「RG20 7TT」であるため、ブール値モードで MATCH AGAINST メソッドを使用するため、それを見つけることができます。同時に、その半径内にある他の郵便番号のリストとも一致します (これは別のクエリです)。

部分一致で注文する方法が見つからないようです。たとえば、次のようになります。

ORDER BY FIELD(postcode, 'RG20', 'RG14', 'RG18','RG17','RG28','OX12','OX11') 
      DESC, city DESC

特にRG20 7TTを探しているわけではないので、部分一致はできないと思います。

SUBSTR (郵便番号、-4) を試し、左右を調べましたが、「フィールド別」を使用しても成功せず、別のルートを見つけることができませんでした...申し訳ありませんが、これは少し長くなりましたが、私は ' m はちょっと困っています。英国の郵便番号は 2 つの部分に分かれており、最後のセクションは常に 3 文字であり、データベース内では 2 つの間にスペースがあれば、それが役立つ場合があります。

郵便番号の後に DESC がありますが、特定の順序 (RG20、RG14、RG18 など) で表示する必要があります。降順を指定すると順序が削除されるかどうかはわかりません。

4

4 に答える 4

11
Order By Case
            When postcode Like 'RG20%' Then 1
            When postcode Like 'RG14%' Then 2
            When postcode Like 'RG18%' Then 3
            When postcode Like 'RG17%' Then 4
            When postcode Like 'RG28%' Then 5
            When postcode Like 'OX12%' Then 6
            When postcode Like 'OX11%' Then 7
            Else 99
            End Asc
    , City Desc
于 2011-03-08T06:44:00.350 に答える
5

フィールドを最初の 4 文字までトリミングすることで、正しい軌道に乗っています。

ORDER BY FIELD(LEFT(postcode, 4), 'RG20', 'RG14', ...),
--          or SUBSTRING(postcode FROM 1 FOR 4)
--          or SUBSTR(postcode, 1, 4)

ここでは、DESC は必要ありません。

(結果セットに、プレフィックスがFIELD() 順序付けリストに表示されない郵便番号が含まれている場合は、指定した明示的に順序付けられたレコードの前にそれらのレコードが表示されるため、もう少し作業が必要になります。上記の例です。)

于 2011-03-08T06:47:37.793 に答える
2

完全にカスタムの並べ替えスキームが必要な場合は、それを行う方法が 1 つしかありません... 並べ替える値を保持するテーブルを作成し、「sequence」または「sort_order」フィールドを含めます。次に、このテーブルに結合して、シーケンス フィールドで並べ替えることができます。

シーケンス フィールドに関する 1 つの注記。intとして作成することは理にかなっています...まあ、シーケンスは多くの場合intです:)ソート順を変更する可能性がある場合は英数字にすることを検討することをお勧めします...それははるかに簡単です整数のシーケンスに数値を挿入するよりも、"5 と "6" の間に "5A" を挿入します。

于 2011-03-08T06:39:33.693 に答える
1

charindex 私が使用する別の方法は、関数を利用することです:

order by charindex(substr(postcode,4,1),"RG20RG14RG18...",1)

とにかくそれが構文だと思います。現時点ではSASでこれを行っているだけなので、メモリから適応する必要がありました。
しかし、基本的には、弦の希望する部分に早く当たるほど、ランクが高くなります。

多種多様な郵便番号でランク付けしようとしている場合、caseステートメントはかなり重くなります。

于 2013-03-06T12:24:26.973 に答える