feat: sqlserver

This commit is contained in:
taojinlong 2021-08-04 21:27:37 +08:00
parent d86531967f
commit dfe654c547
2 changed files with 134 additions and 48 deletions

View File

@ -13,14 +13,17 @@ public class SqlServerSQLConstants extends SQLConstants {
public static final String KEYWORD_FIX = "%s." + sqlServer.getKeywordPrefix() + "%s" + sqlServer.getKeywordSuffix();
public static final String UNIX_TIMESTAMP = "UNIX_TIMESTAMP(%s)";
public static final String UNIX_TIMESTAMP = "(CAST(DATEDIFF(SS, '1970-01-01 00:00:00', s ) as bigint) - 8 * 3600 ) * 1000";
public static final String DATE_FORMAT = "DATE_FORMAT(%s,'%s')";
public static final String DATE_FORMAT = "CONVERT(varchar(100), %s, %s)";
public static final String FROM_UNIXTIME = "FROM_UNIXTIME(%s,'%s')";
public static final String CAST = "CAST(%s AS %s)";
public static final String LONG_TO_DATE = "DATEADD(second,%s,'1970-01-01 08:00:00') ,120)";
public static final String STRING_TO_DATE = "CONVERT(datetime, %s ,120)";
public static final String DEFAULT_DATE_FORMAT = "%Y-%m-%d %H:%i:%S";
public static final String DEFAULT_INT_FORMAT = "DECIMAL(20,0)";

View File

@ -93,26 +93,31 @@ public class SqlserverQueryProvider extends QueryProvider {
// 处理横轴字段
if (f.getDeExtractType() == DE_TIME) { // 时间 转为 数值
if (f.getDeType() == DE_INT || f.getDeType() == DE_FLOAT) {
fieldName = String.format(SqlServerSQLConstants.UNIX_TIMESTAMP, originField) + "*1000";
fieldName = String.format(SqlServerSQLConstants.UNIX_TIMESTAMP, originField);
} else {
fieldName = originField;
}
} else if (f.getDeExtractType() == 0) {
if (f.getDeType() == 2) {
fieldName = String.format(SqlServerSQLConstants.CAST, originField, SqlServerSQLConstants.DEFAULT_INT_FORMAT);
} else if (f.getDeType() == 3) {
fieldName = String.format(SqlServerSQLConstants.CAST, originField, SqlServerSQLConstants.DEFAULT_FLOAT_FORMAT);
} else if (f.getDeType() == 1) {
fieldName = String.format(SqlServerSQLConstants.DATE_FORMAT, originField, SqlServerSQLConstants.DEFAULT_DATE_FORMAT);
} else if (f.getDeExtractType() == DE_STRING) { //字符串转时间
if (f.getDeType() == DE_INT) {
fieldName = originField;
// String.format(SqlServerSQLConstants.CAST, originField, SqlServerSQLConstants.DEFAULT_INT_FORMAT);
} else if (f.getDeType() == DE_FLOAT) {
fieldName = originField;
// String.format(SqlServerSQLConstants.CAST, originField, SqlServerSQLConstants.DEFAULT_FLOAT_FORMAT);
} else if (f.getDeType() == DE_TIME) {
fieldName = originField;
// String.format(SqlServerSQLConstants.DATE_FORMAT, originField, SqlServerSQLConstants.DEFAULT_DATE_FORMAT);
} else {
fieldName = originField;
}
} else {
if (f.getDeType() == 1) {
if (f.getDeType() == DE_TIME) { //
String cast = String.format(SqlServerSQLConstants.CAST, originField, SqlServerSQLConstants.DEFAULT_INT_FORMAT) + "/1000";
fieldName = String.format(SqlServerSQLConstants.FROM_UNIXTIME, cast, SqlServerSQLConstants.DEFAULT_DATE_FORMAT);
} else if (f.getDeType() == 2) {
fieldName = String.format(SqlServerSQLConstants.CAST, originField, SqlServerSQLConstants.DEFAULT_INT_FORMAT);
fieldName = originField;
// String.format(SqlServerSQLConstants.FROM_UNIXTIME, cast, SqlServerSQLConstants.DEFAULT_DATE_FORMAT);
} else if (f.getDeType() == DE_INT) {
fieldName = originField;
// String.format(SqlServerSQLConstants.CAST, originField, SqlServerSQLConstants.DEFAULT_INT_FORMAT);
} else {
fieldName = originField;
}
@ -139,22 +144,22 @@ public class SqlserverQueryProvider extends QueryProvider {
@Override
public String createQuerySQLWithPage(String table, List<DatasetTableField> fields, Integer page, Integer pageSize, Integer realSize, boolean isGroup) {
return createQuerySQL(table, fields, isGroup) + " LIMIT " + (page - 1) * pageSize + "," + realSize;
}
@Override
public String createQueryTableWithLimit(String table, List<DatasetTableField> fields, Integer limit, boolean isGroup) {
return createQuerySQL(table, fields, isGroup) + " LIMIT 0," + limit;
}
@Override
public String createQuerySqlWithLimit(String sql, List<DatasetTableField> fields, Integer limit, boolean isGroup) {
return createQuerySQLAsTmp(sql, fields, isGroup) + " LIMIT 0," + limit;
return createQuerySQL(table, fields, isGroup) + " ORDER BY " + fields.get(0).getOriginName() + " offset " + (page - 1) * pageSize + " rows fetch next " + realSize + " rows only";
}
@Override
public String createQuerySQLAsTmpWithPage(String sql, List<DatasetTableField> fields, Integer page, Integer pageSize, Integer realSize, boolean isGroup) {
return createQuerySQLAsTmp(sql, fields, isGroup) + " LIMIT " + (page - 1) * pageSize + "," + realSize;
return createQuerySQLAsTmp(sql, fields, isGroup) + " ORDER BY " + fields.get(0).getOriginName() + " offset " + (page - 1) * pageSize + " rows fetch next " + realSize + " rows only";
}
@Override
public String createQueryTableWithLimit(String table, List<DatasetTableField> fields, Integer limit, boolean isGroup) {
return createQuerySQL(table, fields, isGroup) + " ORDER BY " + fields.get(0).getOriginName() + " offset 0 rows fetch next " + limit + " rows only";
}
@Override
public String createQuerySqlWithLimit(String sql, List<DatasetTableField> fields, Integer limit, boolean isGroup) {
return createQuerySQLAsTmp(sql, fields, isGroup) + " ORDER BY " + fields.get(0).getOriginName() + " offset 0 rows fetch next " + limit + " rows only";
}
@Override
@ -601,7 +606,34 @@ public class SqlserverQueryProvider extends QueryProvider {
return sql;
}
private String transDateFormat(String dateStyle, String datePattern) {
//日期格式化
// private String transDateFormat(String dateStyle, String datePattern) {
// String split = "-";
// if (StringUtils.equalsIgnoreCase(datePattern, "date_sub")) {
// split = "-";
// } else if (StringUtils.equalsIgnoreCase(datePattern, "date_split")) {
// split = "/";
// }
//
// switch (dateStyle) {
// case "y":
// return "yyyy";
// case "y_M":
// return "yyyy" + split + "MM";
// case "y_M_d":
// return "yyyy" + split + "MM" + split + "dd";
// case "H_m_s":
// return "%H:%i:%S";
// case "y_M_d_H_m":
// return "%Y" + split + "%m" + split + "%d" + " %H:%i";
// case "y_M_d_H_m_s":
// return "%Y" + split + "%m" + split + "%d" + " %H:%i:%S";
// default:
// return "%Y-%m-%d %H:%i:%S";
// }
// }
//日期格式化
private String transDateFormat(String dateStyle, String datePattern, String originField) {
String split = "-";
if (StringUtils.equalsIgnoreCase(datePattern, "date_sub")) {
split = "-";
@ -611,42 +643,93 @@ public class SqlserverQueryProvider extends QueryProvider {
switch (dateStyle) {
case "y":
return "%Y";
return "CONVERT(varchar(100), datepart(yy, " + originField + "))";
case "y_M":
return "%Y" + split + "%m";
return "CONVERT(varchar(100), datepart(yy, " + originField + ")) N'" + split + "'CONVERT(varchar(100), datepart(mm, " + originField + "))";
case "y_M_d":
return "%Y" + split + "%m" + split + "%d";
if(split.equalsIgnoreCase("-")){
return "CONVERT(varchar(100), " + originField + ", 23)";
}else {
return "CONVERT(varchar(100), " + originField + ", 111)";
}
case "H_m_s":
return "%H:%i:%S";
return "CONVERT(varchar(100), " + originField + ", 24)";
case "y_M_d_H_m":
return "%Y" + split + "%m" + split + "%d" + " %H:%i";
if(split.equalsIgnoreCase("-")){
return "substring( convert(varchar," + originField + ",120),1,16)";
}else {
return "replace("+ "substring( convert(varchar," + originField + ",120),1,16), '-','/')";
}
case "y_M_d_H_m_s":
return "%Y" + split + "%m" + split + "%d" + " %H:%i:%S";
if(split.equalsIgnoreCase("-")){
return "convert(varchar," + originField + ",120)";
}else {
return "replace("+ "convert(varchar," + originField + ",120), '-','/')";
}
default:
return "%Y-%m-%d %H:%i:%S";
return "convert(varchar," + originField + ",120)";
}
}
private String transStringToDateFormat(String dateStyle, String datePattern, String originField) {
String split = "-";
if (StringUtils.equalsIgnoreCase(datePattern, "date_sub")) {
split = "-";
} else if (StringUtils.equalsIgnoreCase(datePattern, "date_split")) {
split = "/";
}
switch (dateStyle) {
case "y":
return "CONVERT(varchar(100), datepart(yy, " + "SELECT CONVERT(datetime, " + originField + " ,120)" + "))";
case "y_M":
if(split.equalsIgnoreCase("-")){
return "substring( convert(varchar," + "SELECT CONVERT(datetime, " + originField + " ,120)" + ",120),1,7)";
}else {
return "replace("+ "substring( convert(varchar," + "SELECT CONVERT(datetime, " + originField + " ,120)" + ",120),1,7), '-','/')";
}
case "y_M_d":
if(split.equalsIgnoreCase("-")){
return "CONVERT(varchar(100), " + "SELECT CONVERT(datetime, " + originField + " ,120)" + ", 23)";
}else {
return "CONVERT(varchar(100), " + "SELECT CONVERT(datetime, " + originField + " ,120)" + ", 111)";
}
case "H_m_s":
return "CONVERT(varchar(100), " + "SELECT CONVERT(datetime, " + originField + " ,120)" + ", 24)";
case "y_M_d_H_m":
if(split.equalsIgnoreCase("-")){
return "substring( convert(varchar," + "SELECT CONVERT(datetime, " + originField + " ,120)" + ",120),1,16)";
}else {
return "replace("+ "substring( convert(varchar," + "SELECT CONVERT(datetime, " + originField + " ,120)" + ",120),1,16), '-','/')";
}
case "y_M_d_H_m_s":
if(split.equalsIgnoreCase("-")){
return "convert(varchar," + "SELECT CONVERT(datetime, " + originField + " ,120)" + ",120)";
}else {
return "replace("+ "convert(varchar," + "SELECT CONVERT(datetime, " + originField + " ,120)" + ",120), '-','/')";
}
default:
return "convert(varchar," + "SELECT CONVERT(datetime, " + originField + " ,120)" + ",120)";
}
}
private SQLObj getXFields(ChartViewFieldDTO x, String originField, String fieldAlias) {
String fieldName = "";
if (x.getDeExtractType() == 1) {
if (x.getDeType() == 2 || x.getDeType() == 3) {
fieldName = String.format(SqlServerSQLConstants.UNIX_TIMESTAMP, originField) + "*1000";
} else if (x.getDeType() == 1) {
String format = transDateFormat(x.getDateStyle(), x.getDatePattern());
fieldName = String.format(SqlServerSQLConstants.DATE_FORMAT, originField, format);
if (x.getDeExtractType() == DE_TIME) {
if (x.getDeType() == DE_INT || x.getDeType() == DE_FLOAT) { //时间转数值
fieldName = String.format(SqlServerSQLConstants.UNIX_TIMESTAMP, originField);
} else if (x.getDeType() == DE_TIME) { //时间格式化
fieldName = transDateFormat(x.getDateStyle(), x.getDatePattern(), originField);
} else {
fieldName = originField;
}
} else {
if (x.getDeType() == 1) {
String format = transDateFormat(x.getDateStyle(), x.getDatePattern());
if (x.getDeExtractType() == 0) {
fieldName = String.format(SqlServerSQLConstants.DATE_FORMAT, originField, format);
} else {
String cast = String.format(SqlServerSQLConstants.CAST, originField, SqlServerSQLConstants.DEFAULT_INT_FORMAT) + "/1000";
String from_unixtime = String.format(SqlServerSQLConstants.FROM_UNIXTIME, cast, SqlServerSQLConstants.DEFAULT_DATE_FORMAT);
fieldName = String.format(SqlServerSQLConstants.DATE_FORMAT, from_unixtime, format);
if (x.getDeType() == DE_TIME) {
if (x.getDeExtractType() == DE_STRING) {// 字符串转时间
String cast = String.format(SqlServerSQLConstants.STRING_TO_DATE, originField);
fieldName = transDateFormat(x.getDateStyle(), x.getDatePattern(), cast);
} else {// 数值转时间
String cast = String.format(SqlServerSQLConstants.LONG_TO_DATE, originField+ "/1000");
fieldName = transDateFormat(x.getDateStyle(), x.getDatePattern(), cast);
}
} else {
fieldName = originField;