【问题标题】:string LIKE column in jOOQjOOQ 中的字符串 LIKE 列
【发布时间】:2017-02-22 20:11:32
【问题描述】:

我一直在寻找在 jOOQ 中实现以下查询的方法,但找不到任何东西。

SELECT *
FROM   tableName
WHERE  'this is a string' LIKE CONCAT('%', word ,'%')

提前致谢。

【问题讨论】:

    标签: jooq


    【解决方案1】:

    这里有两点值得一提:

    1. 如何在LIKE谓词左侧创建绑定变量
    2. 如何在 SQL 中创建串联

    1。绑定变量

    只需为此使用DSL.val(String),例如:

    Field<String> field = val("this is a string");
    

    然后您可以在查询中使用它,就像任何其他 Field

    2。串联

    为此使用DSL.concat(Field...) 方法。例如:

    Field<String> concatenated = concat(inline("%"), TABLENAME.WORD, inline("%"));
    

    请注意,我在这里使用的是DSL.inline(String),而不是val(),因为这将创建一个字符串文字(内联绑定变量),而不是一个普通的绑定变量。更多信息在这里:

    https://www.jooq.org/doc/latest/manual/sql-building/bind-values/inlined-parameters

    完整查询:

    DSL.using(configuration)
       .selectFrom(TABLENAME)
       .where(val("this is a string").like(concat(
            inline("%"), TABLENAME.WORD, inline("%")
        )))
       .fetch();
    

    【讨论】:

    • 感谢@Lukas 的详尽解释
    【解决方案2】:

    如果你这样使用它会起作用

    SELECT * FROM   TableName WHERE  ColumnName LIKE CONCAT('%','item', '%')
    

    jOOQ 会是这样的

    DSLContext create = DSL.using(connection, dialect);

      CREATE.Select * .from(TableName).WHERE 
     (TableName.ColumnName.LIKE CONCAT ('%item%'))
     .EXECUTE()
    

    【讨论】:

      猜你喜欢
      • 2018-03-24
      • 2019-02-22
      • 2017-05-24
      • 2021-11-19
      • 1970-01-01
      • 2017-10-16
      • 2018-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多