Java SQL的CHARINDEX语法异常
我试图选择字符串的数字部分,并从中找到最大值。我写了这段代码,但当我添加CHARINDEX函数时,出现了一些问题Java SQL的CHARINDEX语法异常,java,sql,postgresql,substring,Java,Sql,Postgresql,Substring,我试图选择字符串的数字部分,并从中找到最大值。我写了这段代码,但当我添加CHARINDEX函数时,出现了一些问题 Integer sss= (Integer) em.createQuery("SELECT max(cast(SUBSTRING(s.fam, 1, CHARINDEX('-',s.fam)-1) as integer)) FROM Teacher s").getSingleResult(); 它给了我: 原因:org.hibernate.exception.sqlgramma
Integer sss= (Integer) em.createQuery("SELECT max(cast(SUBSTRING(s.fam, 1, CHARINDEX('-',s.fam)-1) as integer)) FROM Teacher s").getSingleResult();
它给了我:
原因:org.hibernate.exception.sqlgrammareexception:无法
提取结果集
原因:org.postgresql.util.psql异常:错误:语法错误
大致位置:as
我在PATINDEX和LOCATE函数中也得到了同样的结果。好的STRPOS在Postgres 12 fiddle中工作得很好:
您需要用strpos替换charindex
我知道,所有这些都在评论中,但您可能有一个问题,即STRPOS参数如下:
strpos(string, substring)
CHARINDEX(substring, string)
对于CHARINDEX来说是这样的:
strpos(string, substring)
CHARINDEX(substring, string)
在您的代码行中,您还必须小心:
错误:不允许负的子字符串长度
这将在字符串中没有“-”时结束
错误:integer:test类型的输入语法无效
选择maxcastSUBSTRINGs.fam,1,CHARINDEX'-',s.fam-1作为教师的整数。我认为您的括号有问题。您的错误指向PostgreSQL-它是否具有您正在使用的函数?SQL没有函数CHARINDEX,PostgreSQL也没有。这里列出了所有受支持的函数:感谢您的回答,但是使用thisInteger sss=Integer em.createQuerySelectMaxCastSubstrings.fam,1,strposs.fam,'-'-1作为教师s.getSingleResult中的整数;我也一样error@Vytsalo你检查过我警告过的可能出现的问题了吗?您检查过s.fam列中的数据了吗?是的,它只有两个字段为123 aks和348 cbsOk的记录,所以有两个问题:1。使用我的代码和这些数据,您会得到与您的问题相同的错误?2.这是你问题中的错误的文本吗?干杯