子字符串和子字符串函数(SQL)之间有什么区别?

子字符串和子字符串函数(SQL)之间有什么区别?,sql,oracle,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替换子字符串?SUBSTR是Oracle的函数 SUBST

在我使用之前:

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替换子字符串?

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

你没有说你得到了什么异常,但我猜这是一个语法错误

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

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



“我试过你的建议,但没用”


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

子字符串是sql标准ISE:IEC 9075:199中定义的sql操作二,

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

Oracle仍然不支持标准语法


是否有人在oracle中编写了一个黑客程序来支持标准语法?

子字符串
不受oracle支持。子字符串函数不受支持!但是谁可以使用子字符串函数呢?在java中,您必须用java编写一段代码来标识您的数据库,并根据该代码编辑sql查询。谢谢您的回答。H以下是有关我的问题的更多详细信息:WsWebService ws;ws.sendQuery(“从Pays-Where子字符串中选择标签(标签,0,1)='A',Pays.class”);现在我使用的不是entityManagerFactory.createQuery(),而是ws.sendQuery()WsWebService是web服务或只是java对象我尝试了你的建议,但它不起作用(
where SUBSTR(p.libeleClient, 0,1) = 'X'