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 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 FROM_UNIXTIME = "FROM_UNIXTIME(%s,'%s')";
public static final String CAST = "CAST(%s AS %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_DATE_FORMAT = "%Y-%m-%d %H:%i:%S";
public static final String DEFAULT_INT_FORMAT = "DECIMAL(20,0)"; 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.getDeExtractType() == DE_TIME) { // 时间 转为 数值
if (f.getDeType() == DE_INT || f.getDeType() == DE_FLOAT) { 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 { } else {
fieldName = originField; fieldName = originField;
} }
} else if (f.getDeExtractType() == 0) { } else if (f.getDeExtractType() == DE_STRING) { //字符串转时间
if (f.getDeType() == 2) { if (f.getDeType() == DE_INT) {
fieldName = String.format(SqlServerSQLConstants.CAST, originField, SqlServerSQLConstants.DEFAULT_INT_FORMAT); fieldName = originField;
} else if (f.getDeType() == 3) { // String.format(SqlServerSQLConstants.CAST, originField, SqlServerSQLConstants.DEFAULT_INT_FORMAT);
fieldName = String.format(SqlServerSQLConstants.CAST, originField, SqlServerSQLConstants.DEFAULT_FLOAT_FORMAT); } else if (f.getDeType() == DE_FLOAT) {
} else if (f.getDeType() == 1) { fieldName = originField;
fieldName = String.format(SqlServerSQLConstants.DATE_FORMAT, originField, SqlServerSQLConstants.DEFAULT_DATE_FORMAT); // 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 { } else {
fieldName = originField; fieldName = originField;
} }
} else { } else {
if (f.getDeType() == 1) { if (f.getDeType() == DE_TIME) { //
String cast = String.format(SqlServerSQLConstants.CAST, originField, SqlServerSQLConstants.DEFAULT_INT_FORMAT) + "/1000"; String cast = String.format(SqlServerSQLConstants.CAST, originField, SqlServerSQLConstants.DEFAULT_INT_FORMAT) + "/1000";
fieldName = String.format(SqlServerSQLConstants.FROM_UNIXTIME, cast, SqlServerSQLConstants.DEFAULT_DATE_FORMAT); fieldName = originField;
} else if (f.getDeType() == 2) { // String.format(SqlServerSQLConstants.FROM_UNIXTIME, cast, SqlServerSQLConstants.DEFAULT_DATE_FORMAT);
fieldName = String.format(SqlServerSQLConstants.CAST, originField, SqlServerSQLConstants.DEFAULT_INT_FORMAT); } else if (f.getDeType() == DE_INT) {
fieldName = originField;
// String.format(SqlServerSQLConstants.CAST, originField, SqlServerSQLConstants.DEFAULT_INT_FORMAT);
} else { } else {
fieldName = originField; fieldName = originField;
} }
@ -139,22 +144,22 @@ public class SqlserverQueryProvider extends QueryProvider {
@Override @Override
public String createQuerySQLWithPage(String table, List<DatasetTableField> fields, Integer page, Integer pageSize, Integer realSize, boolean isGroup) { 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; return createQuerySQL(table, 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) + " LIMIT 0," + limit;
}
@Override
public String createQuerySqlWithLimit(String sql, List<DatasetTableField> fields, Integer limit, boolean isGroup) {
return createQuerySQLAsTmp(sql, fields, isGroup) + " LIMIT 0," + limit;
} }
@Override @Override
public String createQuerySQLAsTmpWithPage(String sql, List<DatasetTableField> fields, Integer page, Integer pageSize, Integer realSize, boolean isGroup) { 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 @Override
@ -601,7 +606,34 @@ public class SqlserverQueryProvider extends QueryProvider {
return sql; 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 = "-"; String split = "-";
if (StringUtils.equalsIgnoreCase(datePattern, "date_sub")) { if (StringUtils.equalsIgnoreCase(datePattern, "date_sub")) {
split = "-"; split = "-";
@ -611,42 +643,93 @@ public class SqlserverQueryProvider extends QueryProvider {
switch (dateStyle) { switch (dateStyle) {
case "y": case "y":
return "%Y"; return "CONVERT(varchar(100), datepart(yy, " + originField + "))";
case "y_M": 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": 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": case "H_m_s":
return "%H:%i:%S"; return "CONVERT(varchar(100), " + originField + ", 24)";
case "y_M_d_H_m": 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": 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: 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) { private SQLObj getXFields(ChartViewFieldDTO x, String originField, String fieldAlias) {
String fieldName = ""; String fieldName = "";
if (x.getDeExtractType() == 1) { if (x.getDeExtractType() == DE_TIME) {
if (x.getDeType() == 2 || x.getDeType() == 3) { if (x.getDeType() == DE_INT || x.getDeType() == DE_FLOAT) { //时间转数值
fieldName = String.format(SqlServerSQLConstants.UNIX_TIMESTAMP, originField) + "*1000"; fieldName = String.format(SqlServerSQLConstants.UNIX_TIMESTAMP, originField);
} else if (x.getDeType() == 1) { } else if (x.getDeType() == DE_TIME) { //时间格式化
String format = transDateFormat(x.getDateStyle(), x.getDatePattern()); fieldName = transDateFormat(x.getDateStyle(), x.getDatePattern(), originField);
fieldName = String.format(SqlServerSQLConstants.DATE_FORMAT, originField, format);
} else { } else {
fieldName = originField; fieldName = originField;
} }
} else { } else {
if (x.getDeType() == 1) { if (x.getDeType() == DE_TIME) {
String format = transDateFormat(x.getDateStyle(), x.getDatePattern()); if (x.getDeExtractType() == DE_STRING) {// 字符串转时间
if (x.getDeExtractType() == 0) { String cast = String.format(SqlServerSQLConstants.STRING_TO_DATE, originField);
fieldName = String.format(SqlServerSQLConstants.DATE_FORMAT, originField, format); fieldName = transDateFormat(x.getDateStyle(), x.getDatePattern(), cast);
} else { } else {// 数值转时间
String cast = String.format(SqlServerSQLConstants.CAST, originField, SqlServerSQLConstants.DEFAULT_INT_FORMAT) + "/1000"; String cast = String.format(SqlServerSQLConstants.LONG_TO_DATE, originField+ "/1000");
String from_unixtime = String.format(SqlServerSQLConstants.FROM_UNIXTIME, cast, SqlServerSQLConstants.DEFAULT_DATE_FORMAT); fieldName = transDateFormat(x.getDateStyle(), x.getDatePattern(), cast);
fieldName = String.format(SqlServerSQLConstants.DATE_FORMAT, from_unixtime, format);
} }
} else { } else {
fieldName = originField; fieldName = originField;