Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate hql子字符串函数在postgres和oracle中的行为不同吗?_Java_Oracle_Postgresql_Hibernate - Fatal编程技术网

Java Hibernate hql子字符串函数在postgres和oracle中的行为不同吗?

Java Hibernate hql子字符串函数在postgres和oracle中的行为不同吗?,java,oracle,postgresql,hibernate,Java,Oracle,Postgresql,Hibernate,当执行此hql时,我使用hibernate和oracle 我的甲骨文方言是 org.hibernate.dialect.Oracle10gDialect org.hibernate.dialect.PostgreSQLDialect select u.name,substring(u.name,0,2) changedname from User u 博士后方言是 org.hibernate.dialect.Oracle10gDialect org.hibernate.dialect

当执行此hql时,我使用hibernate和oracle

我的甲骨文方言是

org.hibernate.dialect.Oracle10gDialect
org.hibernate.dialect.PostgreSQLDialect

select u.name,substring(u.name,0,2) changedname 
from User u 
博士后方言是

org.hibernate.dialect.Oracle10gDialect
org.hibernate.dialect.PostgreSQLDialect

select u.name,substring(u.name,0,2) changedname 
from User u 
--结果是

name        |  changedname 
------------------------------
azizkhani   |  azi
但当我把方言从oracle迁移到postgres时 我的结果是不同的

name        |  changedname 
-------------------------------
azizkhani   |  az
在谷歌之后我发现postgres的位置不是零基数 我不知道为什么会有这个问题。
hibernate方言不是为解决此问题而创建的吗?

对于这两个DBMS,substr()函数中的索引0不正确/无效

对于这两个DBMS,第一个字符位于索引1而不是0处

不同之处在于Oracle将0静默地视为1

然而,Postgres似乎对0的处理方式有所不同(不幸的是,我在手册中找不到任何与此相关的内容)


如果您在HQL查询中使用了正确的索引,那么这应该在两个DBMS中都能正常工作

这是个很酷的问题!oracle数据库非常完整,比其他数据库更精细。