繁体   English   中英

DSL 查询 sortBy 在 java 中不区分大小写的查询形成,mssql DB

[英]DSL query sortBy in case insensitive query formation in java, mssql DB

电流响应 az AZ 需要作为 aA-zZ 或 Aa-Zz

代码行:return select -> select.orderBy(sortFields); 注意:其中sortFieldsList<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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM