【问题标题】:Get month name from Date in jooq从jooq中的日期获取月份名称
【发布时间】:2020-06-17 15:14:32
【问题描述】:

如何从 jooq 中的这个日期对象生成月份的名称(例如:Oct/October)?

日期-“2019-11-01 00:00:00”

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

输出 - 11 月

提前致谢。

【问题讨论】:

    标签: mysql postgresql jooq jooq-sbt-plugin


    【解决方案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());
          }
        }
      };
    }
    

    【讨论】:

      猜你喜欢
      • 2010-12-11
      • 2011-05-28
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-26
      相关资源
      最近更新 更多