编写谓词的更好方法
由于您仅格式化日期以比较日期,因此您可能应该只比较日期值本身,因为数据库将能够使用索引,所以这将更快得多:
-- In SQLACCOUNT_PAYMENT.PAYMENT_DATE <= SYSDATE// In jOOQACCOUNT_PAYMENT.PAYMENT_DATE.le(DSL.currentDate())
实现与方言无关的自定义TO_CHAr()
功能。
CustomField为此,您应该创建一个。这将允许您与jOOQ的查询呈现和变量绑定生命周期进行交互,以便根据
RenderContext的基础呈现SQL方言特定的子句
SQLDialect。从本质上讲,这可以归结为编写(假设使用jOOQ
3.2 API):
class ToChar extends CustomField<String> { final Field<?> arg0; final Field<?> arg1; ToChar(Field<?> arg0, Field<?> arg1) { super("to_char", SQLDataType.VARCHAR); this.arg0 = arg0; this.arg1 = arg1; } @Override public void toSQL(RenderContext context) { context.visit(delegate(context.configuration())); } @Override public void bind(BindContext context) { context.visit(delegate(context.configuration())); } private QueryPart delegate(Configuration configuration) { switch (configuration.dialect().family()) { case ORACLE: return DSL.field("TO_CHAr({0}, {1})", String.class, arg0, arg1); case SQLSERVER: return DSL.field("ConVERT(VARCHAr(8), {0}, {1})", String.class, arg0, arg1); default: throw new UnsupportedOperationException("Dialect not supported"); } }}然后,您可以编写自己的静态实用程序方法,如下所示:
public class MyDSL { public static Field<String> toChar(Field<?> field, String format) { return new ToChar(field, DSL.inline(format)); }}


