4

Delphi XE2で既存のPadadoxデータベースからデータを抽出する必要があります(はい、10年以上分割しています...)。

次のような値を含むフィールド(例ではid)に応じて結果を並べ替える必要があります: '1'、 '2 a'、 '100'、 '1 b'、 '50 bis' ...そしてこれを取得します:

- 1
- 1 b
- 2 a
- 50 bis
- 100

多分そのような何かがそれをすることができます、しかしそれらのキーワードは存在しません:

SELECT id, TRIM(TRIM(ALPHA FROM id)) as generated, TRIM(TRIM(NUMBER FROM id)) as generatedbis, etc
FROM "my.db"
WHERE ...
ORDER BY generated, generatedbis

どうすればパラドックスでそのような順序付けを達成できますか...?

4

2 に答える 2

7

これを試して:

SELECT id, CAST('0' + id AS INTEGER) A 
FROM "my.db" 
ORDER BY A, id
于 2012-04-05T14:26:01.517 に答える
1

これらのアイデアが思い浮かびます。

  1. 文字列を比較可能なものに、おそらく語彙的に再配置する比較/マッピング関数を使用して、クライアント側でソートを実行するソート関数をdelphiで作成します。

  2. データを並べ替える列をテーブルに追加します。この列には、標準の文字列比較と比較できる値の変更が含まれているため、ORDERBYで機能します。

  3. 値の変更を行うパラドックスにストアド関数を追加し、この関数をORDERBY句で使用します。

変更とは、文字列をコンポーネントに分割し、すべてのコンポーネントが文字列内の同じ位置にくるように、各コンポーネントに十分なスペースを右に埋めて再結合することを意味します。これは、各コンポーネントについて、データベース内の特定の長さを超える値がないことを確信できる場合にのみ確実に機能します。

私はこれらの提案をパラドックスやデルファイの知識をほとんど/まったく知らないので、あなたは私の提案を一粒の塩でとらなければならないでしょう。

于 2012-04-05T13:04:29.033 に答える