Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在JPQL中将datetime转换为日期?_Sql_Spring_Jpa - Fatal编程技术网

Sql 如何在JPQL中将datetime转换为日期?

Sql 如何在JPQL中将datetime转换为日期?,sql,spring,jpa,Sql,Spring,Jpa,这个代码有什么问题 @Query(value = "Select " + "date(ivd.trnDatetime) as date, " + "ivd.binNo as bin, " + "ivd.snNo as sn, " + "count(ivd.invoiceNo) as totInvoice, " + "sum(ivd.totSaleAmt) as totSaleAmt " + "from InvoiceData ivd where i

这个代码有什么问题

@Query(value = "Select " +
    "date(ivd.trnDatetime) as date, " +
    "ivd.binNo as bin, " +
    "ivd.snNo as sn, " +
    "count(ivd.invoiceNo) as totInvoice, " +
    "sum(ivd.totSaleAmt) as totSaleAmt " +
    "from InvoiceData ivd where ivd.status = 1 group by date(ivd.trnDatetime), ivd.binNo, ivd.snNo")
List<Object[]> getDailyTransactionReport();
实体中TrnDataTime的属性

@NotNull
@Column(name = "transaction_at", nullable = false)
private Instant trnDatetime;

SqlServer中的等效列是datetime

错误消息告诉您,此时没有事务的值。这意味着表中的某些记录在处的事务_的值为空,或者查询出于某种原因未选择该值。您需要确保您选择了它,如果它为null,您将为它设置一个默认值,或者筛选出该特定字段的值为null的记录

此外,如果不一定需要事务_at的值,则可以从@Column中删除nullable=false

编辑


如注释部分所述,解决方案是CASTivd.trndatime as date

错误消息告诉您,此时没有事务的值。这意味着表中的某些记录在处的事务_的值为空,或者查询出于某种原因未选择该值。您需要确保您选择了它,如果它为null,您将为它设置一个默认值,或者筛选出该特定字段的值为null的记录

此外,如果不一定需要事务_at的值,则可以从@Column中删除nullable=false

编辑

正如注释部分所指出的,解决方案是CASTivd.trndatime as date

JPQL不支持日期,因此您的查询失败。您有以下选项:

通过在@Query中设置nativeQuery=true,更改为使用本机SQL 如果您使用的是Hibernate,请使用将TrnDataTime强制转换为LocalDate的HQL特定命令: 选择castivd.trnDatetime作为LocalDate作为date, countivd.invoiceNo作为总发票 来自发票数据ivd 其中ivd.status=1 按castivd.trnDatetime分组为LocalDate 为了简洁起见,我忽略了其他列

请注意,结果列表的每个项目中的索引0都是LocalDate,JPQL不支持日期,因此您的查询失败。您有以下选项:

通过在@Query中设置nativeQuery=true,更改为使用本机SQL 如果您使用的是Hibernate,请使用将TrnDataTime强制转换为LocalDate的HQL特定命令: 选择castivd.trnDatetime作为LocalDate作为date, countivd.invoiceNo作为总发票 来自发票数据ivd 其中ivd.status=1 按castivd.trnDatetime分组为LocalDate 为了简洁起见,我忽略了其他列


请注意,结果列表的每个项目中的索引0都是LocalDate

谢谢,但它在DB中也是一个不能为null的字段,并且在DB中该字段没有null值。@shovon然后您需要确保选择它。定义需要一个具有该名称的字段,而您的select没有。我认为问题在于转换。如果我使用CONVERTdate,ivd.transaction_at as date并设置nativeQuery=true,那么它工作正常。但它会使其特定于数据库。@如果将其命名为date,则在结果集中不会有任何事务。尝试CONVERTdate,ivd.transaction\u at as transaction\u atThanks,但它在DB中也是不可为空的字段,并且在DB中该字段没有空值。@然后您需要确保选择它。定义需要一个具有该名称的字段,而您的select没有。我认为问题在于转换。如果我使用CONVERTdate,ivd.transaction_at as date并设置nativeQuery=true,那么它工作正常。但它会使其特定于数据库。@如果将其命名为date,则在结果集中不会有任何事务。尝试CONVERTdate,ivd.transaction\u at as transaction\u at
@NotNull
@Column(name = "transaction_at", nullable = false)
private Instant trnDatetime;