从jooq中的Date获取月份名称



如何在jooq中从此日期对象生成月份名称(例如:Oct/October(?

日期-"2019-11-01 00:00:00">

希望从日期中提取月份名称。

输出-11月

提前谢谢。

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

jOOQ不支持特定于供应商的开箱即用的日期时间格式化功能。您可以使用纯SQL模板来使用特定于供应商的功能,例如:

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

最新更新