[英]DSL query sortBy in case insensitive query formation in java, mssql DB
电流响应 az AZ 需要作为 aA-zZ 或 Aa-Zz
代码行:return select -> select.orderBy(sortFields); 注意:其中sortFields是List<OrderField> sortFields = new ArrayList>()
尝试使用DSL.lower menthod 但它说将 sortFields 转换为字符串。 代码行:return select -> select.orderBy(lower(sortFields));
sortFields 在 List<OrderField<?>> 的参考中 有没有什么方法可以让排序不区分大小写以获得响应(aA-zZ 或 Aa-Zz)
查看方法签名:
你不能只是组合它们,它们接受不同的类型。 ORDER BY
子句接受OrderField
的集合(或可变参数数组)( Field<?>
是一个有效的子类型),而LOWER()
是一个标量 function 只接受一个字段。 您不能只是LOWER()
字段集合。 此外,您不能LOWER()
a SortField
,它可能类似于TABLE.COLUMN.asc()
。
我不知道为什么您的原始数据结构必须是List<OrderField>
。 您是否在某处维护该列表以创建动态 SQL,包括动态ASC
/ DESC
排序顺序?
在任何情况下,您都必须将LOWER()
function 分别应用于每个字段,例如:
List<Field<?>> sortFields = ...
select.orderBy(sortFields.stream().map(f -> lower(f)).toList())
如果您有动态ASC
/ DESC
排序指示,则必须在对每个 position 调用lower(f)
后应用它。
作为旁注, 排序规则是 SQL 实现不区分大小写排序的惯用方式,也许更好地使用它。
最后通过添加字段找到了答案 orderFieldSort = lower((Field) orderField);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.