繁体   English   中英

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

[英]what is the difference between SUBSTRING and SUBSTR functions (SQL)?

在我使用之前:

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);
          }

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

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

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

而SUBSTRING()根本不是oracle函数。 您或者是从其他数据库借用了语法,或者您正在使用定制功能而没有意识到它。


“我尝试了您的建议,但是没有用”

收到错误消息吗? 还是说它不返回任何记录? 因为我给出了文档中定义的完全有效的用法。 但是您还没有提供任何数据示例,因此对于我来说,几乎不可能提供一种解决方案来从数据库中返回行。

子字符串是sql标准ISE:IEC 9075:1992中定义的sql操作。

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

Oracle仍然不支持标准语法。

是否有人在oracle中编写了用于支持标准语法的hack?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM