(improvement)(headless) Develop a time format conversion function for adapting to PostgreSQL database, capable of supporting data aggregation by week and month

This commit is contained in:
flyingfish
2024-09-28 09:31:18 +08:00
committed by GitHub
parent a50fe98f00
commit 77b6642dcc
2 changed files with 10 additions and 8 deletions

View File

@@ -26,19 +26,19 @@ public class PostgresqlAdaptor extends BaseDbAdaptor {
public String getDateFormat(String dateType, String dateFormat, String column) {
if (dateFormat.equalsIgnoreCase(Constants.DAY_FORMAT_INT)) {
if (TimeDimensionEnum.MONTH.name().equalsIgnoreCase(dateType)) {
return "formatDateTime(toDate(parseDateTimeBestEffort(toString(%s))),'%Y-%m')"
.replace("%s", column);
return "to_char(to_date(%s,'yyyymmdd'), 'yyyy-mm')".replace("%s", column);
} else if (TimeDimensionEnum.WEEK.name().equalsIgnoreCase(dateType)) {
return "toMonday(toDate(parseDateTimeBestEffort(toString(%s))))"
return "to_char(date_trunc('week',to_date(%s, 'yyyymmdd')),'yyyy-mm-dd')"
.replace("%s", column);
} else {
return "toDate(parseDateTimeBestEffort(toString(%s)))".replace("%s", column);
return "to_char(to_date(%s,'yyyymmdd'), 'yyyy-mm-dd')".replace("%s", column);
}
} else if (dateFormat.equalsIgnoreCase(Constants.DAY_FORMAT)) {
if (TimeDimensionEnum.MONTH.name().equalsIgnoreCase(dateType)) {
return "formatDateTime(toDate(%s),'%Y-%m')".replace("%s", column);
return "to_char(to_date(%s,'yyyy-mm-dd'), 'yyyy-mm')".replace("%s", column);
} else if (TimeDimensionEnum.WEEK.name().equalsIgnoreCase(dateType)) {
return "toMonday(toDate(%s))".replace("%s", column);
return "to_char(date_trunc('week',to_date(%s, 'yyyy-mm-dd')),'yyyy-mm-dd')"
.replace("%s", column);
} else {
return column;
}

View File

@@ -43,8 +43,10 @@ public class TagQueryServiceImpl implements TagQueryService {
@Value("${s2.item.value.date.format:yyyy-MM-dd}")
private String itemValueDateFormat;
private final String tagValueAlias = "internalTagCount";
private final String maxDateAlias = "internalMaxDate";
//因有些数据库(如Postgresql)不支持列名大小写,所以列名统一使用小写,以兼容更多数据库
//private final String tagValueAlias = "internalTagCount";
private final String tagValueAlias = "internal_tag_count";
private final String maxDateAlias = "internal_max_date";
private final TagMetaService tagMetaService;
private final SemanticLayerService queryService;
private final ModelService modelService;