我有一个表,用户可以添加和编辑现有记录。当用户输入新记录时,修订版本设置为“ - ”,因为它是初始草稿。当用户编辑一个记录并且它是一个' - '时,它会将修订版设置为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而不是' - '。但是,如果可以的话,我更喜欢破折号。
谢谢。
答案 0 :(得分:4)
我建议将其转换为数字并使用零或空而不是'-'
。
数字列也有助于比较以后的版本或找到相邻版本:
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
您需要检查'-'
作为特例,因为将其转换为数字会失败。
答案 1 :(得分:0)
使用数字类型,然后出于显示目的,您可以使用
包装该字段的返回值
CASE WHEN field=0 THEN '-' ELSE field-converted-to-string END as revisionStr
(使用适当的函数进行字段转换为字符串!)
对'field'进行排序将自动为您工作(DESC),因为它只是一个正常的数字。
修改强>
例如:
SELECT
CASE WHEN revision=0 THEN
'-'
ELSE
RTrim(CAST(revision AS varchar(30)))
END AS revisionStr
FROM table
ORDER by revision DESC