从Jooq中的Date获取月份名称

时间:2020-03-05 03:19:08

标签: mysql postgresql jooq jooq-sbt-plugin

如何在jooq中从该日期对象生成月份名称(例如:十月/十月)?

date--“ 2019-11-01 00:00:00”

要从日期中提取月份名称。

输出-十一月

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用DSL.month(Field)提取月份号。

jOOQ没有特定于供应商的支持日期时间格式化功能。您可以使用plain SQL templating来使用特定于供应商的功能,例如:

// MySQL
public static Field<String> formatMonth(Field<Timestamp> dateColumn) {
  return DSL.field("date_format({0}, '%M')", SQLDataType.VARCHAR, dateColumn);
}

// PostgreSQL
public static Field<String> formatMonth(Field<Timestamp> dateColumn) {
  return DSL.field("to_char({0}, 'Month')", SQLDataType.VARCHAR, dateColumn);
}

如果您需要多次执行此操作,而又不想总是担心供应商的不可知性,则可以创建一个CustomField

public static Field<String> formatMonth(Field<Timestamp> dateColumn) {
  return new CustomField<String>("format_month", SQLDataType.VARCHAR) {
    @Override
    public void accept(Context<?> ctx) {
      switch (ctx.family()) {
        case MYSQL:
          ctx.visit(DSL.field("date_format({0}, '%M')", SQLDataType.VARCHAR, dateColumn));
          break;
        case POSTGRES:
          ctx.visit(DSL.field("to_char({0}, 'Month')", SQLDataType.VARCHAR, dateColumn));
          break;
        default:
          throw new UnsupportedOperationException("Dialect not supported: " + ctx.family());
      }
    }
  };
}
相关问题