【问题标题】:Select rows based on date and time range根据日期和时间范围选择行
【发布时间】:2017-12-30 19:39:27
【问题描述】:

我正在根据两列日期和时间查询表以返回行:
tx_creation_date [date]tx_creation_time [time(7)]

使用以下查询语句:

public interface PurchaseRepository extends PagingAndSortingRepository<Purchase, BigDecimal> { 

    @Query(value = "select p from Purchase p where (p.txCreationDate >= 
    :startDate and p.txCreationTime >= :startTime) and (p.txCreationDate <= :endDate and p.txCreationTime <= :endTime)")  
    public List<Purchase> findAllTxByTimestampRange(@Param(startDate) LocalDate startDate,  
    @Param(startTime) LocalTime startTime, @Param(endDate) LocaleDate endDate,  
    @Param(endTime) LocalTime endTime);  

    other queries...  
}

这里是 Purchase 类的一个 sn-p:

@Entity  
@Table(name = "po_log")  
public class Purchase implements Serializable {  
    private static final long serialVersionUID = -1L;  

    @Id  
    @Column(name = "po_number")
    private BigDecimal poNumber;  

    private String type;  

    @Column(name = "tx_creation_date")  
    @Type(type = "org.jadira.usertype.dateandtime.joda.PersistentLocalDate")  
    private LocalDate txCreationDate;  

    @Column(name = "tx_creation_time")
    @Type(type = "org.jadira.usertype.dateandtime.joda.PersitentLocalTime")  
    private LocalTime txCreationTime; 

    ..  
    .. 

    getters and setters  

}  

执行时我收到以下错误消息:

数据类型datetime和time在大于等于运算符中不兼容

我尝试了几个技巧都没有成功:

  1. 在连接属性中设置此sendTimeAsDateTime=false
  2. 使用cast (txCreationTime as time)convert
  3. 使用cast 将日期和时间连接为datetime

非常感谢任何帮助。

旁注:选择具有日期范围的行只会成功。因此,问题真正在于时间。

我目前的设置

  • 弹簧注解
  • 休眠 4
  • Jadira 用于用户类型,Joda 用于 LocalDate 和 LocalTime
  • SQL Server 2014
  • localDate 从用户格式化为 yyyyMMdd
  • 从用户格式化为 HHmmssSSS 的本地时间

【问题讨论】:

    标签: sql-server spring hibernate jpa jodatime


    【解决方案1】:

    如果您正在使用jtds 驱动程序 - 尝试使用本机 microsft JDBC driver - 它实现了 JDBC 4 并且应该随着时间的推移正常工作。

    或者,您可以将实体中的时间列映射为String,并在查询中设置参数,例如new SimpleDateFormat("HH:mm:ss.SSS")

    【讨论】:

    • 我已经在使用 microsoft JDBC 6 驱动程序并尝试了第 4 版,只是为了彻底。没有运气。所以我切换到本机查询。无论如何,谢谢您的意见。
    猜你喜欢
    • 2017-01-11
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 2013-01-10
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多