【发布时间】:2020-02-12 09:27:51
【问题描述】:
我正在从事一个春季项目,其中以升序或降序应用排序。列类型是 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_substr 以获得正确的结果?
【问题讨论】:
-
regexp_replace(str, '^\.', '0.')? -
@PonderStibbons 不工作
标签: java oracle spring-boot