如何使用MONTH
函数编写JPA查询,就像sql查询一样?
@NamedQuery(name="querybymonth", query="select t from table1 t where MONTH(c_Date) = 5")
当我使用上述模式进行查询时,出现错误:unexpected token - MONTH
。
答案 0 :(得分:23)
如果您使用的是EclipseLink(2.1),则可以使用FUNC()函数调用JPA JPQL规范中未定义的任何数据库函数。
即。 FUNC('MONTH',c_Date)
在JPA 2.1(EclipseLink 2.5)中,FUNCTION语法成为规范的一部分(并替换了EclipseLink特定的FUNC)。
如果您使用的是TopLink Essentials,则无法在JPQL中执行此操作,但您可以为其定义TopLink Expression查询(类似于JPA 2.0条件),或使用本机SQL。
此外,如果您使用任何JPA 2.0提供程序并使用Criteria查询,则可以使用function()API来定义它。
答案 1 :(得分:6)
我想查询YEAR(itemDate),但函数没有退出,然后我看到了SUBSTRING()函数,所以我做的是
Select q from table where SUBSTRING(itemDate, 1, 4)='2011'
它对我有用!希望它有所帮助!
如果你需要一个动态变量,你也可以这样做。这里:poDate是在setParameter();
中定义的年份@NamedQuery(name = "PurchaseOrders.findByYear", query = "SELECT p FROM PurchaseOrders p WHERE SUBSTRING(p.poDate, 1, 4) = :poDate")
Query q = em.createNamedQuery("PurchaseOrders.findByYear");
q.setParameter("poDate", s_year+"");
但如果你对你的解决方案没问题,那就没事了。我发现JPA的执行速度更快。
答案 2 :(得分:3)
MONTH()
函数存在于Hibernate HQL中,但不是标准的JPA函数。也许你的JPA提供商有一些专有的等价物,但你没有提到它。如果没有,请回到原生SQL。
我正在使用Toplink Essentials。如果Toplink中存在任何功能,请提供帮助。感谢。
据我所知,TopLink没有直接的等价物。因此要么使用本机SQL查询,要么使用TopLink Expression查询(不确定这一点,并且不确定TopLink Essentials中是否可以使用它)。
答案 3 :(得分:1)
Following worked for me with hibernate (4.3.9.Final) & JPA 2.1.
@NamedQuery(name = "PartyEntity.findByAID", query = "select distinct psc.party from PartyShortCode psc where (psc.shortCode = :aidNumber or FUNCTION('REPLACE',psc.accountReference,' ','') = :aidNumber) and psc.sourceSystem in :sourceSystem")
答案 4 :(得分:0)
如果您的班级拥有日期类型变量,则可以使用如下查询:
import requests
import json
def main(url):
with requests.Session() as req:
for item in range(1, 1000, 100):
r = req.get(url.format(item)).json()
for a in r['result']:
print("Headline: {}, Url: {}".format(
a['headline'], a['url']))
main("https://search.api.cnn.io/content?q=coronavirus&sort=newest&category=business,us,politics,world,opinion,health&size=100&from={}")