gpt4 book ai didi

sql - 复杂的 JPQL 字符串查询

转载 作者:行者123 更新时间:2023-12-04 18:33:30 29 4
gpt4 key购买 nike

我正在尝试对数据库中的字符串字段执行非常复杂的查询。我在 JPQL 方面不是很有经验,所以我想我会尝试获得一些帮助。

我在数据库中有一个名为 FILE_PATH 的字段。在 FILE_PATH 字段中,将有如下值:

  • 'C:\temp\files\filename.txt'
  • '文件:\\\C:\testing\testfolder\innerfolder\filename2.txt'

我需要能够从用户给定的查询中仅对文件名进行搜索。因此,不是简单地执行 SELECT Table FROM Table AS t WHERE t.filePath LIKE '%:query%',事情将变得更复杂一些以适应文件名部分小路。文件路径和文件名是动态数据,所以我不能只在其中硬编码前缀字符串。这让我很困惑,但我知道 JPQL 中有一些字符串表达式可能能够处理这个要求。

基本上,我只需要返回与 FILE_PATH 字段中最后一个“\”之后的给定查询匹配的所有行。这可能吗?

感谢您的帮助。

编辑:正在使用的数据库是 SQL Server。

最佳答案

最好的解决方案可能是添加一个仅包含文件名的单独列。如果你不能,那么这可能会起作用(取决于你使用的数据库):

drop table test;
create table test(name varchar(255));
insert into test values('C:\temp\name2\filename.txt');
insert into test values('file:\\\C:\\innerfolder\filename2.txt');
select * from test
where substring(name, locate('\', name, -1)) like '%name2%'

这是纯 SQL,但据我所知,JPQL 支持所有函数:http://www.datanucleus.org/products/accessplatform/jpa/jpql_functions.html

一个问题是 locate(,,-1)。它的意思是“从字符串的末尾开始”。它适用于 H2 数据库,但不适用于 MySQL 和 Apache Derby。它可能适用于 Oracle、SQL Server(我没有测试)。对于某些数据库,可能需要将“\”替换为“\\”(MySQL、PostgreSQL;不确定 Hibernate 是否为您完成)。

关于sql - 复杂的 JPQL 字符串查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3661863/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com