2

在我使用之前:

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 ?

4

3 回答 3

4

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);
          }
于 2012-10-15T09:16:58.693 回答
2

substring 是 sql 标准 ISE:IEC 9075:1992 中定义的 sql 操作。

substr 是 oracle 使用的旧语法。这种错误的语法与真正的英文单词的 sql 用法完全不一致,绝不是缩写。

Oracle 仍然不支持标准语法。

有没有人在 oracle 中编写了一个 hack 来支持标准语法?

于 2014-03-26T12:57:24.220 回答
0

你没有说你得到了什么异常,但我猜这是一个语法错误。Oracle SUBSTR() 的正确语法是...

where SUBSTR(p.libeleClient, 0,1) = 'X'

...(管他呢)。即第一次出现的单个字符必须相等;一些指定的值。SUBSTR() 不是布尔函数。

而 SUBSTRING() 根本不是一个 oracle 函数。要么是从其他数据库借用了语法,要么是在没有意识到的情况下使用了定制函数。


“我试过你的建议,但它不起作用”

你有错误吗?或者你的意思是它不返回任何记录?因为我给出了一个完全有效的用法,如文档中所定义。但是您没有给出任何数据示例,因此我几乎不可能提供一个从您的数据库中返回行的解决方案。

于 2012-10-15T09:20:34.003 回答