:
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?答案 0 :(得分:4)
SUBSTR是Oracle的功能
SUBSTRING是MySql的功能
取决于使用
的DB编辑:
尝试编辑您的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);
}
答案 1 :(得分:0)
你没有说你得到了什么异常,但我猜这是一个语法错误。 Oracle的SUBSTR()的正确语法是......
where SUBSTR(p.libeleClient, 0,1) = 'X'
...(或其他)。这是单个角色的第一次出现必须相等;一些指定的值。 SUBSTR()不是布尔函数。
而SUBSTRING()根本不是oracle函数。要么你从其他数据库中借用了语法,要么就是在没有意识到的情况下使用定制函数。
“我尝试了你的建议,但它不起作用”
你收到错误吗?或者你的意思是它没有返回任何记录?因为我已经给出了完全有效的用法,as defined in the documentation。但是你还没有提供任何数据示例,所以我几乎不可能提供一个从数据库中返回行的解决方案。
答案 2 :(得分:0)
substring是sql标准ISE中定义的sql操作:IEC 9075:1992。
substr是oracle使用的旧语法。这种错误的语法与真实英语单词的sql使用完全不一致,从不缩写。
Oracle仍然不支持标准语法。
是否有人在oracle中编写了一个hack来支持标准语法?