0

ユーザーが既存のレコードを追加および編集できるテーブルがあります。ユーザーが新しいレコードを入力すると、最初のドラフトであるため、リビジョンは「-」に設定されます。ユーザーがレコードとその「-」を編集すると、リビジョンが1に設定されます。その後、再度編集すると、リビジョン+1が実行されます。これは2になります。

レコードの履歴を、リビジョン別にソートされたApexレポートに表示します。これは、バージョン10に到達するまで機能しました。これは、次のようになっているためです。

9
8
7
6
5
4
3
2
10
1'-
'

10は9から続くはずですが、2から1の間です。これは、私のデータ型がNUMBERではなくVARCHAR2に設定されているためです。次のように正しく注文することは可能ですか?

10
9
8
7
6
5
4
3
2
1'-
'

注:リビジョンは大きくなる可能性があり、100に達することもあります。最も簡単な方法は、データ型をNUMBERに変更し、「-」の代わりに0を使用することです。ただし、できればダッシュをお勧めします。

ありがとうございました。

4

2 に答える 2

4

数値に変換し、 の代わりにゼロまたは null を使用することをお勧めします'-'。数値列は、どのバージョンが新しいかを比較したり、隣接するバージョンを見つけたりする場合にも役立ちます。

select...
    where version_a > version_b

select...
    where version_a = version_b + 1

フィールドがある場合varchar、そのようなものには特別なロジックが必要になります。私の意見では、ゼロで表示したい場合-は、データベースに入れるのではなく、表示ロジックで簡単に処理できます。

ただし、本当にキャラクターを維持する必要がある場合は、次のようなことができるはずです。

order by case when column = '-' then 0 else to_number(column) end descending

'-'数値への変換が失敗するため、特殊なケースとしてチェックする必要があります。

于 2013-03-08T10:38:37.743 に答える
0

数値型を使用すると、表示目的でそのフィールドの戻り値を でラップできます
CASE WHEN field=0 THEN '-' ELSE field-converted-to-string END as revisionStr
(フィールドを文字列に変換するには、適切な関数を使用してください!)

「フィールド」での並べ替えは、通常の数値であるため、自動的に機能します (DESC)。

編集
例:

SELECT
  CASE WHEN revision=0 THEN
    '-' 
  ELSE
    RTrim(CAST(revision AS varchar(30))) 
  END AS revisionStr
FROM table
ORDER by revision DESC
于 2013-03-08T10:43:00.780 に答える