java - jooq 中的列函数用于分割字符串

标签 java sql jooq

我正在使用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/

相关文章:

java - Jooq 在 sqlite 上存储后不返回主键

java - 如何使用 JOOQ 确定固定长度数组数据库列的大小?

java - Android 程序不想运行 - "Unfortunately, (myAppName) has stopped."

java - 从通用类型 T 获取 "Class"对象

c# - 如何将 SQLite (SQLite.NET) 添加到我的 C# 项目中

mysql - 如何通过多个 JOIN 提高查询性能

java - Web 应用程序 java 中的配置属性

java - 如何在 Android 上的 Realm 中使用构造函数

sql - SQLite 中的 MD5 函数

java - 如何配置 jOOQ 使用 javax 注释或其他东西而不是 jakarta 注释来生成?