SUBSTRING和SUBSTR函数(SQL)有什么区别?

时间:2012-10-15 09:14:32

标签: sql oracle

在我使用之前

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?

3 个答案:

答案 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来支持标准语法?