【问题标题】:SQL's CHARINDEX Syntax exceptionSQL CHARINDEX 语法异常
【发布时间】:2020-01-17 19:42:30
【问题描述】:

我正在尝试选择字符串的数字部分并从中找到最大值。我写了这段代码,但是当我添加 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.SQLGrammarException:不能 提取结果集

原因:org.postgresql.util.PSQLException: ERROR: 语法错误 (大约位置:“as”)

我在 PATINDEX 和 LOCATE 函数中得到了相同的结果。

【问题讨论】:

标签: java sql postgresql substring


【解决方案1】:

STRPOS 在 Postgres 12(小提琴)中工作得很好:https://dbfiddle.uk/?rdbms=postgres_12&fiddle=23ab8f41f29775f056717fc6af8c2b71

您需要将charindex() 替换为strpos()

所有这些都在 cmets 中,我知道,但也许您对 STRPOS 参数是这样的事实有疑问:

strpos(string, substring)

STRPOS DEMO

对于 CHARINDEX 来说是这样的:

CHARINDEX(substring, string) 

CHARINDEX DEMO

在您的代码行中,您还必须小心:

错误:不允许负子串长度 当字符串中没有'-'时会发生这种情况

Here is example for that.

错误:整数类型的输入语法无效:“test”

Here is example for that

【讨论】:

  • 感谢您的回答,但有了这个
  • Integer sss= (Integer) em.createQuery("SELECT max(cast(SUBSTRING(s.fam, 1, strpos(s.fam, '-')-1) as integer)) FROM老师 s").getSingleResult();我得到了同样的错误
  • @Vytsalo 你检查过我警告过的可能的问题吗?您检查过 s.fam 列中的数据了吗?
  • 是的,它只有 2 条记录,字段为“123-aks”和“348-cbs”
  • 好的,有两个问题: 1. 使用我的代码和这些数据,您会得到与您的问题相同的错误吗? 2.这是您问题中错误的文本吗?干杯!
猜你喜欢
  • 2013-07-29
  • 1970-01-01
  • 2018-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多