我使用 PostgreSQL,我想用这个查询提取最大值:
select max (num_ordre_decision) from decision
问题是 num_ordre_decision
包含这种数据:
'4/35/677'
'4/35/1001'
我的列的类型是String。当我运行这个查询时,我得到了最大值:
'4/35/1001'
这是假。
我只想将 677
与 1001
进行比较,以便在前一种情况下获得最大值 '4/35/677'
.
我认为我应该在查询中使用拆分。
更新
我试过这个查询:
select max(split_part(num_ordre_decision, '/', 3))
from decision;
我有这个值:'99'
当我尝试运行这个查询时
select split_part(num_ordre_decision, '/', 3)
from decision;
我得到了这个结果
''
''
'677'
'1001'
'99'
出现这个结果''
是因为表中的真实值不包含分隔符'/'
。我认为 max(split_part(num_ordre_decision, '/', 3)
使总和意味着它使 9+9
。但正确的结果应该是 1001
因此必须将它们作为数字进行比较。
更新:
我想在我的项目中使用这个查询
我有这个功能:
public List getMaxNumOrder (){
String query= "select max(NULLIF(split_part(num_ordre_decision, '/', 3), '')::int) from decision";
SQLQuery sqlQuery = this.getSession().createSQLQuery(query);
return sqlQuery.list();
}
但是当我遇到这个错误时:
org.hibernate.QueryException: Not all named parameters have been set: [:int] [select max(NULLIF(split_part(num_ordre_decision, '/', 3), '')::int) from decision]
at org.hibernate.impl.AbstractQueryImpl.verifyParameters(AbstractQueryImpl.java:339)
at org.hibernate.impl.SQLQueryImpl.verifyParameters(SQLQueryImpl.java:228)
我认为我应该使用:query.setParameter
我不知道怎么用
最佳答案
您可以获得最大值值:
select max(split_part(num_ordre_decision, '/', 3))
from decision;
要获得总体最大值,您可能需要:
select num_ordre_decision
from decision
order by split_part(num_ordre_decision, '/', 3) desc
limit 1;
关于sql - 从sql中的字符串中提取最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25770767/