在我使用之前:
entityManagerFactory.createQuery("select p FROM Pays p where SUBSTRING(p.libeleClient, 0,1)
但是当我使用这个查询时:
entityManagerFactory.createQuery("select p FROM Pays p where SUBSTR(p.libeleClient, 0,1)
我得到一个例外:(
谁用 SUBSTR 替换 SUBSTRING ?
SUBSTR 是 Oracle 的函数
SUBSTRING 是 MySql 的函数
取决于您使用的数据库
编辑:
尝试编辑您的java代码,如下所示
String query = "select p FROM Pays p where SUBSTRING(p.libeleClient, 0,1)";
// from Connection Object (connection)
DatabaseMetaData meta = connection.getMetaData();
//If the DB is Oracle
if(meta.getDatabaseProductName()).contains("Oracle")) {
entityManagerFactory.createQuery(query.replace("SUBSTRING", "SUBSTR"));
}// If the DB not Oracle , any Other like MySql
else {
entityManagerFactory.createQuery(query);
}
substring 是 sql 标准 ISE:IEC 9075:1992 中定义的 sql 操作。
substr 是 oracle 使用的旧语法。这种错误的语法与真正的英文单词的 sql 用法完全不一致,绝不是缩写。
Oracle 仍然不支持标准语法。
有没有人在 oracle 中编写了一个 hack 来支持标准语法?
你没有说你得到了什么异常,但我猜这是一个语法错误。Oracle SUBSTR() 的正确语法是...
where SUBSTR(p.libeleClient, 0,1) = 'X'
...(管他呢)。即第一次出现的单个字符必须相等;一些指定的值。SUBSTR() 不是布尔函数。
而 SUBSTRING() 根本不是一个 oracle 函数。要么是从其他数据库借用了语法,要么是在没有意识到的情况下使用了定制函数。
“我试过你的建议,但它不起作用”
你有错误吗?或者你的意思是它不返回任何记录?因为我给出了一个完全有效的用法,如文档中所定义。但是您没有给出任何数据示例,因此我几乎不可能提供一个从您的数据库中返回行的解决方案。