Получить название месяца от даты в Jooq - PullRequest
1 голос
/ 05 марта 2020

Как я могу сгенерировать название месяца (например, октябрь / октябрь) из этого объекта даты в jooq?

date- "2019-11-01 00:00:00"

хотите извлечь название месяца из даты.

output- ноябрь

Заранее спасибо.

1 Ответ

1 голос
/ 05 марта 2020

Вы можете извлечь номер месяца, используя DSL.month(Field).

jOOQ не определяет поставщика c поддерживает функции форматирования даты и времени из коробки. Вы можете использовать plain SQL templating для использования спецификаций поставщика c, таких как:

// 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());
      }
    }
  };
}
...