使用 Jooq 在数值基础上按 varchar 字段(具有数值)对查询进行排序

Posted

技术标签:

【中文标题】使用 Jooq 在数值基础上按 varchar 字段(具有数值)对查询进行排序【英文标题】:Sort a query by a varchar field(which have numerical values) on numerical basis with Jooq 【发布时间】:2011-08-12 02:46:49 【问题描述】:

如何对 varchar 字段进行排序,我已将 ID 设为 varchar,我想对其进行数字排序。

我们可以在 SQL 中使用

sql query ... order by 0+id desc

我在 Jooq 中拥有的是

SimpleSelectFinalStep<ScoreCardRecord> q = factory.selectFrom(ScoreCard.SCORE_CARD)
                    .orderBy(OloScoreCard.SCORE_CARD_ID.descending())
                    .limit(0,1);

【问题讨论】:

我想通了... SimpleSelectFinalStep q = factory.selectFrom(ScoreCard.SCORE_CARD) .orderBy(factory.plainSQLField("(0+SCORE_CARD_ID)").descending()) .limit(0,1);打扰大家了! 您可以在 *** 上回答您自己的问题。这不会打扰任何人。有类似问题的其他读者可能会偶然发现您的问题并找到您的答案,这也很有帮助... 【参考方案1】:

您是否尝试将VARCHAR 字段转换为数字DataType?你可以这样做:

factory.selectFrom(ScoreCard.SCORE_CARD)
       .orderBy(OloScoreCard.SCORE_CARD_ID.cast(Integer.class).descending())
       .limit(0, 1);

这样你就可以省略使用“普通 SQL 字段”

【讨论】:

以上是关于使用 Jooq 在数值基础上按 varchar 字段(具有数值)对查询进行排序的主要内容,如果未能解决你的问题,请参考以下文章

JOOQ 使用索引创建表

jooq:如何处理 POINT MySQL 数据类型

使用 jOOQ 创建具有主键的表

JOOQ 入门-- CRUD 语句

JOOQ 入门-- CRUD 语句

如何使用 linq lambda 对包含数值的 varchar 列进行排序到实体