jooq中的列函数拆分字符串

曼努埃尔·罗塞蒂(Manuel Rossetti)

我正在使用jooq。我在数据库中有一个包含长字符串的字段。我想将字符串函数应用于select语句的返回值,以便在带标签的列中返回值。这是一个例子:

select STAT_NAME, STAT_COUNT, AVERAGE, HALF_WIDTH, SIM_RUN_ID_FK
FROM ACROSS_REP_STAT
where STAT_NAME like '%:Queue%'
ORDER BY STAT_NAME, SIM_RUN_ID_FK;

在上面的查询中,STAT_NAME是一个很长的字符串。假设我要提取返回的字符串的子字符串作为列:

select SUBSTRING(STAT_NAME, 1, 4) AS Something, STAT_NAME, STAT_COUNT, 
  AVERAGE, HALF_WIDTH, SIM_RUN_ID_FK
FROM ACROSS_REP_STAT
where STAT_NAME like '%:Queue%'
ORDER BY STAT_NAME, SIM_RUN_ID_FK;

如何为类似这样的内容建立jooq语句?

假设我想使用DSL中的position()函数来建立索引,例如substring()函数中的4是变量。position()函数返回一个字段。我遇到这样的问题:

substring(STAT_NAME, 1, position(STAT_NAME, ":"))

工作,因为substring()需要一个int而不是一个Field


现在,我看到我正在用一个int和一个Field调用substring(),并且没有为此的方法签名,但是有一个用于

子字符串(字段字段,字段开始位置,字段长度)

如何将从1开始的字段转到字段?

卢卡斯·埃德(Lukas Eder)

org.jooq.impl.DSL类包含了所有你需要的功能。就您而言,DSL.substring()通常,您将静态导入该类中的所有方法

import org.jooq.impl.DSL.*;

并使用SQL中的功能

ctx.select(substring(ACROSS_REP_STAT.STAT_NAME, 1, 4).as("Something"), ...)
   .from(...)
   ...

或者,考虑到您的更新问题:

ctx.select(substring(
        ACROSS_REP_STAT.STAT_NAME, 
        inline(1), 
        position(ACROSS_REP_STAT.STAT_NAME, ":")).as("Something"), ...)
   .from(...)
   ...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章