2012-04-05 21 views
4

Delphi XE2の下で既存のPadadoxデータベースからデータを抽出する必要があります(10年以上に分けて...)。数字と文字を含むフィールドで並べ替え

「1」、「2 a」、「100」、「1 b」、「50 bis」などの値を含むフィールド(この例ではid)に応じて結果を並べる必要があります。そして、この取得:

- 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 

をどのように私はパラドックスで、このような順序付けを達成できますか...?

答えて

7

これを試してみてください:

SELECT id, CAST('0' + id AS INTEGER) A 
FROM "my.db" 
ORDER BY A, id 
+0

SELECT id、CAST(id AS INTEGER)...シンプルでトリックです!私を啓発してくれてありがとう! – Darkendorf

+2

はい、簡単です。私の考えは '' 0 '+ 'が' id'が空であるか、最初の文字がアルファである状況を処理するということでした。明らかにそれは必要ではない。お役に立てて嬉しいです。 – kobik

+0

はよく最初の文字は、アルファがある場合は、実際には^^思ったint型の戻り0としてキャスト - またはnull私は本当に気にしない - それは私が必要と同じように命じています! a、b、1、1b、12、100 bis ...もう一度ありがとう! – Darkendorf

1

これらのアイデアは、心に春:

  1. 多分lexographically、compariableある何かに文字列を並べ替えて比較/マッピング機能を使用して、ソートのクライアント側の処理を行い、Delphiでソート関数を作成します。

  2. は、標準の文字列比較と比較することができるので、保存された機能を追加し

  3. BY ORDERで動作する値の修正が含まれていること、そのデータを並べ替えしたいテーブルに列を追加します値の変更を行うパラドックスに変換し、この関数をORDER BY句で使用します。

は、変更によって、私は何かのように、コンポーネントに文字列を分離し、すべてのコンポーネントが文字列内の同じ位置にあるように、十分なスペースで各コンポーネントを右詰めで再加入を意味します。これは、各コンポーネントについて、値がデータベース内の特定の長さを超えないことを自信を持って伝えることができれば、確実に機能します。

私はこれらの提案をパラドックスまたはデルファイの知識をほとんどまたは全く持たないので、塩の塊で私の提案をしなければなりません。

+1

を塩の完全な瓶と私は非常にアイデアをつかむ... 3.面白いようだが、あなたが私に正しい方向を与えることができるサンプルを私に提供することができれば、それができましたより手軽に^^ – Darkendorf

関連する問題