0

我有需要按字母顺序排序的名称列表,所以我正在对所有值执行 UPPER 并使用 ORDER_BY 来显示排序。

HashMap<String, Object> params = new HashMap<String, Object>();
params.put( "ORDER_BY", "UPPER (VALUE)" );
ArrayList<DataObject> results = (ArrayList<DataObject>) dao.getDataObjects( params, conn ); 

排序工作得很好,但我想更多地了解以下情况。当我对名称 JaCoBsOn、JACOBson 进行排序时的示例。JACOBson 将是第一个,JaCoBsOn 是下一个,为什么不是 JaCoBsOn 先是 JACOBson 呢?

我的猜测是因为它将名称转换为大写。因此,在对名称进行排序时 JaCoBsOn 和 JACOBson 被视为 JACOBSON 并以随机顺序显示?

4

2 回答 2

2

当您转换为大写时,您会得到类似JaCoBsOnand之类的名称JACOBson的关联,是的:Oracle 将按(看似)随机顺序排列关联。要摆脱这种随机性,您需要一个决胜局。

请注意,大写在小写之前排序,因此如果您想JaCoBsOn在之前JACOBson作为决胜局排序,您可以执行以下操作:

ORDER BY UPPER(VALUE), VALUE DESC
于 2013-08-08T14:36:56.970 回答
1

是的,你的猜测是正确的。IMO,首先放置哪个 JACOBSON 行取决于数据库中的实际行顺序。

于 2013-08-08T14:36:52.677 回答