diff --git a/src/main/java/com/alibaba/druid/util/JdbcUtils.java b/src/main/java/com/alibaba/druid/util/JdbcUtils.java index 8aa458ae1d..87b55963d9 100644 --- a/src/main/java/com/alibaba/druid/util/JdbcUtils.java +++ b/src/main/java/com/alibaba/druid/util/JdbcUtils.java @@ -682,4 +682,37 @@ public final class JdbcUtils implements JdbcConstants { return sql.toString(); } + + + /** + * @author owenludong.lud + * @param columnName + * @param tableAlias + * @param pattern if pattern is null,it will be set {%Y-%m-%d %H:%i:%s} as mysql default value and set {yyyy-mm-dd hh24:mi:ss} as oracle default value + * @param dbType {@link JdbcConstants} if dbType is null ,it will be set the mysql as a default value + */ + public static String formatColumnToDateType(String columnName,String tableAlias,String pattern,String dbType){ + StringBuilder sql = new StringBuilder(); + if(!StringUtils.isEmpty(columnName)){ + if(StringUtils.isEmpty(dbType)) dbType = JdbcConstants.MYSQL; + String formatMethod = ""; + if(MYSQL.equalsIgnoreCase(dbType)){ + formatMethod = "STR_TO_DATE"; + if(StringUtils.isEmpty(pattern)) pattern = "%Y-%m-%d %H:%i:%s"; + }else if(ORACLE.equalsIgnoreCase(dbType)){ + formatMethod = "TO_DATE"; + if(StringUtils.isEmpty(pattern)) pattern = "yyyy-mm-dd hh24:mi:ss"; + }else{ + //expand date's handle method for other database + } + sql.append(formatMethod).append("("); + if(!StringUtils.isEmpty(tableAlias)) + sql.append(tableAlias).append("."); + sql.append(columnName).append(","); + sql.append("'"); + sql.append(pattern); + sql.append("')"); + } + return sql.toString(); + } } diff --git a/src/test/java/com/alibaba/druid/bvt/utils/JdbcUtilsTest.java b/src/test/java/com/alibaba/druid/bvt/utils/JdbcUtilsTest.java index 739da78143..2296e36b67 100644 --- a/src/test/java/com/alibaba/druid/bvt/utils/JdbcUtilsTest.java +++ b/src/test/java/com/alibaba/druid/bvt/utils/JdbcUtilsTest.java @@ -23,6 +23,7 @@ import junit.framework.Assert; import junit.framework.TestCase; import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.util.JdbcConstants; import com.alibaba.druid.util.JdbcUtils; public class JdbcUtilsTest extends TestCase { @@ -79,4 +80,12 @@ public class JdbcUtilsTest extends TestCase { Assert.assertEquals(0, list.size()); } } + + public void test_formatColumnToDateType(){ + String colunExp = JdbcUtils.formatColumnToDateType("gmt_create","oo","",JdbcConstants.ORACLE); + Assert.assertEquals("TO_DATE(oo.gmt_create,'yyyy-mm-dd hh24:mi:ss')", colunExp); + + String colunExp2 = JdbcUtils.formatColumnToDateType("gmt_create","oo","",JdbcConstants.MYSQL); + Assert.assertEquals("STR_TO_DATE(oo.gmt_create,'%Y-%m-%d %H:%i:%s')", colunExp2); + } }