0

我有一个表,用户可以添加和编辑现有记录。当用户输入新记录时,修订设置为“-”,因为它是初始草稿。当用户编辑一条记录并且它是一个“-”时,它会将修订设置为 1。之后,如果再次编辑它,它会执行修订 + 1,这将是 2。依此类推..

我在按修订排序的 Apex 报告中显示记录的历史记录。这一直有效,直到我达到版本 10,因为我现在得到以下信息:

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

10 应该从 9 开始,但它介于 2 和 1 之间。这是因为我的数据类型设置为 VARCHAR2 而不是 NUMBER。是否可以像这样正确订购:

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

使用数字类型,然后出于显示目的,您可以使用 a 包装该字段的返回值
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 回答