我正在使用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()函数来创建索引,例如4 在 substring() 函数变量中。 position() 函数返回一个 Field。我无法得到这样的东西:
substring(STAT_NAME, 1, position(STAT_NAME, ":"))
可以工作,因为 substring() 需要一个 int 而不是 Field
<小时/>我现在看到我正在使用 int 和 Field 调用 substring(),并且没有为此的方法签名,但有一个用于
substring(字段字段、字段起始位置、字段长度)
如何将从 1 开始转换为字段?
最佳答案
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(...)
...
关于java - jooq 中的列函数用于分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52395122/