Java Hibernate hql子字符串函数在postgres和oracle中的行为不同吗?
当执行此hql时,我使用hibernate和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
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数据库非常完整,比其他数据库更精细。