我有两个数据库列(datatypevarchar),其中包含如下值
column 1
--------
1.8.0
1.7.0
9.0
10.0
column 2
--------
121
65
78
在ui上,我必须合并这两列并显示如下值
1.8.0_121
1.8.0_78
问题是在对ui上显示的组合列进行排序时。因为这两个列都是varchar,按db order排序,by使用string,121在78之前,这对于升序是错误的。
作为一个解决方案,我在这些列上使用了abs for mysql和to\u number for oracle。mysql在这两个列上都运行良好,但是oracle to\ u number在第一个列上抛出错误“invalid number”,因为它的值为1.8.0
请建议如何处理这种情况只使用代码更改。因为数据库模式的改变会导致许多系统发生大量的改变,所以我不想碰这个。
带数据的示例表
带order by子句的查询
SELECT (MAJOR || '_' || MINOR) AS VER
FROM VERSION
ORDER BY MAJOR ASC, MINOR ASC
结果
更正了将varchar列视为数字的查询
SELECT (MAJOR || '_' || MINOR) AS VER
FROM VERSION
ORDER BY MAJOR ASC, TO_NUMBER(MINOR) ASC
修正结果
直到现在一切都很好。但问题是主列可以有9.0和10.0这样的值,所以我想将主列也转换为ORDERBY子句中的\u数字,这样排序是正确的。但由于值是1.8.0,因此抛出错误。
有争议的案件是
3条答案
按热度按时间dw1jzc5e1#
这个查询对我有用。
oyjwcjzk2#
一种选择是提取所有数字片段(使用正则表达式;我认为这是最简单的选择
TO_NUMBER
并按这些值排序,例如。wj8zmpe13#
这里有一个黑客。。。