JPA/SQL获取一周数据

JPA/SQL获取一周数据,sql,oracle,jpa,Sql,Oracle,Jpa,我试图获取一周的数据,并将其与我拥有的到期列进行比较。所以我需要写一个查询,如果到期日在周一的当前日期+7天之间,那么就获取这些记录。我目前正在使用JPA连接到Oracle DB。由于JPA还允许编写SQL查询,所以请尝试其中任何一种 首先我试过 select * from table WHERE due_date >= CAST (DATEADD(day,7, GETDATE())AS Date); 执行此查询后,它表示DATEADD无效 由于due-date列存储为Var

我试图获取一周的数据,并将其与我拥有的到期列进行比较。所以我需要写一个查询,如果到期日在周一的当前日期+7天之间,那么就获取这些记录。我目前正在使用JPA连接到Oracle DB。由于JPA还允许编写SQL查询,所以请尝试其中任何一种

首先我试过

     select * from table  WHERE due_date >= CAST (DATEADD(day,7, GETDATE())AS Date);
执行此查询后,它表示DATEADD无效

由于due-date列存储为Varchar2,所以需要跨表设置时间戳,所以首先需要转换

       to_date("yyyy-MM-dd") and then do the comparison. 
我也试过了

      due_date >= TO_DATE(CURDATE(),INTERVAL 7 DAY); and says invalid.

提前感谢

DATEADD
GETDATE
不是Oracle函数。相反,在
SYSDATE
中添加一个
INTERVAL
,以获得当前查询的等效值:

选择*
从表\u名称
其中到期日>=系统日期+间隔“7”天;
如果希望从7天时间的午夜开始(而不是一天中的当前时间),则还可以使用
TRUNC

选择*
从表\u名称
其中到期日>=TRUNC(系统日期)+间隔“7”天;
所以我需要写一个查询,说明到期日是否在周一的当前日期+7天之间

如果要查询
到期日
介于当前日期和下周星期一之间,则:

选择*
从表\u名称
其中到期日>=TRUNC(SYSDATE)
到期日
因为
due\u date
列存储为Varchar2

请不要那样做。如果要有日期值,则将其存储为
date
数据类型

但是,由于将其存储为ISO8601格式的字符串,因此可以将比较的右侧转换为字符串,并将值作为字符串进行比较(但最好使用日期)

选择*
从表\u名称
其中到期日>=到期日(SYSDATE,“YYYY-MM-DD”)
到期日<到期日(
TRUNC(系统日期,'IW')+间隔'7'天,
“YYYY-MM-DD”
);

如果要使用
to_DATE
due_DATE
从字符串转换为日期,则查询也会起作用;但是,Oracle将无法在
截止日期
列上使用索引,并且要使用索引,您需要基于
截止日期(截止日期,'YYYY-MM-DD')的函数索引
,因此最好转换右侧(但仍然不如将列作为
DATE
数据类型且无需转换)。

DATEADD
GETDATE
不是Oracle函数。相反,向
SYSDATE
添加一个
INTERVAL
,以获得当前查询的等效值:

选择*
从表\u名称
其中到期日>=系统日期+间隔“7”天;
如果希望从7天时间的午夜开始(而不是一天中的当前时间),则还可以使用
TRUNC

选择*
从表\u名称
其中到期日>=TRUNC(系统日期)+间隔“7”天;
所以我需要写一个查询,说明到期日是否在周一的当前日期+7天之间

如果要查询
到期日
介于当前日期和下周星期一之间,则:

选择*
从表\u名称
其中到期日>=TRUNC(SYSDATE)
到期日
因为
due\u date
列存储为Varchar2

请不要这样做。如果要有日期值,请将其存储为
date
数据类型

但是,由于将其存储为ISO8601格式的字符串,因此可以将比较的右侧转换为字符串,并将值作为字符串进行比较(但最好使用日期)

选择*
从表\u名称
其中到期日>=到期日(SYSDATE,“YYYY-MM-DD”)
到期日<到期日(
TRUNC(系统日期,'IW')+间隔'7'天,
“YYYY-MM-DD”
);

如果要使用
to_DATE
due_DATE
从字符串转换为日期,则查询也会起作用;但是,Oracle将无法在
due_DATE
列上使用索引,并且要使用索引,您需要基于
to_DATE(due_DATE,'yyyyy-MM-DD')的函数索引
因此,转换右侧更可取(但仍不如将列作为
日期
数据类型且无需转换)。

我是否应该执行类似操作,从表1中选择*到日期(到期日期,'yyyyy-MM-DD')>=到日期(系统日期,'yyyyy-MM-DD')和到日期(到期日期,'yyyyy-MM-DD'))=TO char(SYSDATE,'yyyyyy-MM-DD')和TO DATE(到期日,'yyyyyyy-MM-DD')SYSDATE)使用
to\u date
);如果您解决了这个问题,那么它会起作用,但是,正如我在回答中所说,在列值上使用
TO_DATE
将阻止您在该列上使用索引(并且您需要一个单独的基于函数的索引)。第二个查询是错误的,因为您在同一比较中将
与\u DATE
与\u CHAR
混合在一起。最好将表更改为不将日期存储为
VARCHAR2
,而是将其存储为
DATE
数据类型。您没有这样做,因此您需要修复或转到