【问题标题】:How to make a query that passes the deadline of the time?如何进行超过时间期限的查询?
【发布时间】:2019-05-08 07:35:45
【问题描述】:

我有一个名为 Task 的表,如下所示,它有一个名为 stopTime

的属性
@Entity
@Table(name = "task", schema = "public")
public class Task {

 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 private Long id;

 @NotEmpty
 private String date;

 @NotEmpty
 private String startTime;

 @NotEmpty
 private String stopTime;

 @NotEmpty
 @Column(length=1000)
 private String description;

 @ManyToOne
 @JoinColumn(name="USER_EMAIL")
 private User user;

 public Long getId() {
    return id;
 }

 public void setId(Long id) {
    this.id = id;
 }

 public String getDate() {
    return date;
 }

 public void setDate(String date) {
    this.date = date;
 }

 public String getStartTime() {
    return startTime;
 }

 public void setStartTime(String startTime) {
    this.startTime = startTime;
 }

 public String getStopTime() {
    return stopTime;
 }

 public void setStopTime(String stopTime) {
    this.stopTime = stopTime;
 }

 public String getDescription() {
    return description;
 }

 public void setDescription(String description) {
    this.description = description;
 }

 public User getUser() {
    return user;
 }

 public void setUser(User user) {
    this.user = user;
 }

现在我在 PostgreSQL 中查询 select 已超过截止日期的所有任务,如下所示:

@Query("select stopTime from Task where ")
List<String> deleteAll();

。建议将任务的stopTime当前时间进行比较。请帮我完成这个查询。 提前致谢!

【问题讨论】:

  • 您在寻找 HQL/JPQL 解决方案还是 SQL 解决方案?如果您正在寻找 SQL 解决方案,您应该将表定义发布为 create table 语句,而不是 Java 代码
  • edit您的问题(通过单击下面的edit 链接)并添加一些sample data 和基于该数据的预期输出。 Formatted textno screen shots。 (edit 您的问题 - 在 cmets 中不要邮政编码或其他信息)

标签: sql postgresql hibernate spring-boot


【解决方案1】:

如果您想比较日期时间类型的列,请使用INTERVAL AND BETWEEN

select * from Task where stopTime BETWEEN (NOW() - INTERVAL '3 day') AND NOW()

为了删除目的,试试这个select * from Task where stopTime &lt; NOW()select * from Task where stopTime IS NOT NULL

【讨论】:

  • @maximShubim 为什么我要选择所有已超过截止日期的行时必须使用 INTERVAL '3 day'?
  • @FabioPlaka 你可以使用任何你想要的间隔。这只是一个例子
  • @MaximShubim 如何使用创建的间隔?
  • @FabioPlaka 我假设您根据计划在某个选定的时间间隔执行此查询。这样旧记录就不会再次获取,您需要限制上一个查询的日期时间。或者您可以使用附加标志来标记记录也已处理。
  • @FabioPlaka 删除目的试试这个select * from Task where stopTime &lt; NOW()select * from Task where stopTime IS NOT NULL
猜你喜欢
  • 1970-01-01
  • 2021-06-05
  • 1970-01-01
  • 2020-01-05
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多