从sql中的字符串中提取最大值

时间:2014-09-10 16:39:12

标签: sql postgresql

我使用PostgreSQL,我想用这个查询提取最大值:

select max (num_ordre_decision) from decision

问题是num_ordre_decision包含这种数据:

'4/35/677'
'4/35/1001'

我的列类型是字符串。当我运行此查询时,我有最大值:

'4/35/1001'

false

我只想将6771001进行比较,以便在前一种情况下获得最大值'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

我不知道如何使用它

3 个答案:

答案 0 :(得分:1)

您可以将最大视为:

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;

答案 1 :(得分:1)

继续@戈登的出色工作。如果要按整数对最后一个部分进行排序,则需要按原样转换值。

这也会处理你的空字符串。

select 
  max(NULLIF(split_part(num_ordre_decision, '/', 3), '')::int)
from decision;

Fiddle

答案 2 :(得分:0)

作为替代方法(当您需要所有列的最大值时):

从(选择)中选择max(some_val)   UNNEST(string_to_array(num_ordre_decision,' /')):: int as some_val 来自决定)x;