Java 在QueryContext Oracle中的数字varchar字段中追加前导零
我正在从事一个spring项目,在该项目中,排序将按升序或降序应用。列类型为varchar。此字段将包含十进制或数字值。它可能包含字母表和数字的组合(添加此类值的可能性可能较小)。因为这是客户的要求,所以我不能更改列的数据类型 假设myNum字段的值为: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
- 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不起作用