package jef.database.query.function; import java.util.List; import jef.database.jsqlparser.expression.Function; import jef.database.jsqlparser.expression.StringValue; import jef.database.jsqlparser.visitor.Expression; /** * 大多数数据库都可以直接将标准格式的字符串当作日期时间处理(隐式转换),Oracle需要用to_date模拟 * @author jiyi * */ public class EmuOracleToDate extends BaseArgumentSqlFunction{ static EmuOracleToDate instance=new EmuOracleToDate(); public static EmuOracleToDate getInstance(){ return instance; } private EmuOracleToDate(){} public String getName() { return "timestamp"; } public Expression renderExpression(List<Expression> arguments) { Expression value=arguments.get(0); return convert(value); } public Expression convert(Expression value) { if((value instanceof StringValue) && ((StringValue)value).length()<=10){ return new Function("to_date",value,new StringValue("yyyy-mm-dd", false)); }else{ return new Function("to_date",value,new StringValue("yyyy-mm-dd hh24:mi:ss", false)); } } public Expression convert(StringValue value) { if(value.length()<=10){ return new Function("to_date",value,new StringValue("yyyy-mm-dd", false)); }else{ return new Function("to_date",value,new StringValue("yyyy-mm-dd hh24:mi:ss", false)); } } }