SQL Server JPA查询中的转换字段

oxcyiej7  于 2022-11-28  发布在  其他
关注(0)|答案(2)|浏览(104)

在我的sql-server中,字段DATE都是以float格式保存的(es:(一个月一个月)
我想导入mysql DB中的字段作为DATETIME。我尝试在sql-server上使用以下查询转换字段:

SELECT CAST(DATDOC as DATETIME) -2 FROM FATTURE where id=25460;

而且结果是正确的。
现在,我想在JPA Query中转换它:

TypedQuery<DateTime> convFattura = emI24.createQuery(" SELECT CAST(dataFattura as DATETIME) -2 FROM FatturaI24 f where f.id = :idFattura", DateTime.class);

但我得出了这个错误:

09-06-2015 14:32:00 ERROR: org.springframework.scheduling.support.TaskUtils$LoggingErrorHandler - Unexpected error occurred in scheduled task.
java.lang.NullPointerException
    at org.hibernate.dialect.function.CastFunction.render(CastFunction.java:55)
    at org.hibernate.hql.internal.ast.SqlGenerator.endFunctionTemplate(SqlGenerator.java:220)
    at org.hibernate.hql.internal.antlr.SqlGeneratorBase.methodCall(SqlGeneratorBase.java:2326)
    at org.hibernate.hql.internal.antlr.SqlGeneratorBase.simpleExpr(SqlGeneratorBase.java:2681)
    at org.hibernate.hql.internal.antlr.SqlGeneratorBase.expr(SqlGeneratorBase.java:1476)

DATETIME中CAST的正确语法是什么?
有什么想法吗?

bnlyeluc

bnlyeluc1#

正如您在注解中所说的,返回值是一个浮点类型,因此我们要做的不是在sql中执行强制转换,而是使用java代码转换浮点类型,您有以下正确的代码:

Query convFattura = emI24.createQuery(" SELECT f.dataFattura FROM FatturaI24 f where f.id = :idFattura");
            convFattura = convFattura.setParameter("idFattura", idFatturaValue);  
        float dataFattura = convFattura.getSingleResult();

将浮点数转换为日期的Java代码:

Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.add(Calendar.HOUR_OF_DAY, (int) dataFattura);
calendar.set(Calendar.MINUTE, (int) ((dataFattura * 60) % 60));
calendar.set(Calendar.SECOND, (int) ((dataFattura * 3600) % 3600));

DateFormat fmt = new SimpleDateFormat();
fmt.setTimeZone(TimeZone.getTimeZone("Europe/Paris")); 
System.out.println(fmt.format(calendar.getTime()));

希望对你有用!

qoefvg9y

qoefvg9y2#

尝试使用转换函数而不是转换函数。它对我很有效...!

相关问题