Java 在QueryContext Oracle中的数字varchar字段中追加前导零

Java 在QueryContext Oracle中的数字varchar字段中追加前导零,java,oracle,spring-boot,Java,Oracle,Spring Boot,我正在从事一个spring项目,在该项目中,排序将按升序或降序应用。列类型为varchar。此字段将包含十进制或数字值。它可能包含字母表和数字的组合(添加此类值的可能性可能较小)。因为这是客户的要求,所以我不能更改列的数据类型 假设myNum字段的值为: 2.12 0.11 0.45 1.7 A12 4.80 B34 0.56 排序后,应在向上显示数字,然后在向下显示字母: 0.11 0.45 0.56 1.7 2.12 4.80 A12 B34 创建要排序的查询的代码为: query

我正在从事一个spring项目,在该项目中,排序将按升序或降序应用。列类型为varchar。此字段将包含十进制或数字值。它可能包含字母表和数字的组合(添加此类值的可能性可能较小)。因为这是客户的要求,所以我不能更改列的数据类型

假设myNum字段的值为:

  • 2.12
  • 0.11
  • 0.45
  • 1.7
  • A12
  • 4.80
  • B34
  • 0.56
排序后,应在向上显示数字,然后在向下显示字母:

  • 0.11
  • 0.45
  • 0.56
  • 1.7
  • 2.12
  • 4.80
  • A12
  • B34
创建要排序的查询的代码为:

 queryContext.getSorts().forEach((s) -> {
                if (orderByClauses.length() > 0) {
                    orderByClauses.append(", ");
                }
                if (s.getColumnName().equalsIgnoreCase("myNum")) {                    
                    orderByClauses.append("regexp_substr(myNum, '^\\D*') nulls first, to_number(regexp_substr(myNum, '\\d+\\.?\\d*'))");                   
                } else {
                    orderByClauses.append(s.getColumnName() + " ");   
                }
                orderByClauses.append(s.getDirection().toString());
            });
对于上面的示例,代码运行良好,但是当我添加.34或.56(在小数点之前没有前导零)时,排序工作不正常


如何将零附加到regexp\u substr以获得正确的结果?

如果您使用的是Oracle 12.2或更高版本,那么您可以利用
to\u NUMBER
函数和
ORDER BY
子句中的
ON CONVERSION ERROR
子句,如下所示:

TO_NUMBER(myNum DEFAULT 999999999 ON CONVERSION ERROR), MYNUM  -- Your orderByClauses
--更新

对于oracle的较低版本,请像下面一样使用regexp_

CASE WHEN REGEXP_LIKE(myNum, '^[\.|[:digit:]]+$') THEN 1 ELSE 2 END 
,MYNUM -- Your orderByClauses

干杯

我们使用的是Oracle 12c,上面的条款不适用于我的to_号码。请您在此处检查您的解决方案:并告诉我。
regexp_replace(str,“^\”,“0”)
?@Pounderstibbons不起作用