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

标签 sql postgresql

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

select max (num_ordre_decision) from decision

问题是 num_ordre_decision 包含这种数据:

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

我的列的类型是String。当我运行这个查询时,我得到了最大值:

'4/35/1001'

这是

我只想将 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

我不知道怎么用

最佳答案

您可以获得最大值:

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/

相关文章:

java - 用于容器化 postgresql 的 Spring boot 的正确 jdbc 是什么

django - 并行线程不会增加具有 Django 性能的多个数据库插入

sql - 按天而不是时间对时间戳进行分组

postgresql - postgreSQL 中以逗号分隔的 jsonb 元素的串联

php - SQL从多个表中选择数据

MYSQL更新查询语法问题

mysql - 查询 A 喜欢 B,B 喜欢 C,两个分离度

mysql - 将两个查询的结果按列组合,无需任何连接条件

php - 还有比从 GROUP_CONCAT 结果中收集 ID 并运行第二个查询来获取一对多数据更好的做法吗?

ruby-on-rails - 如何使用 SQL 获取按年份分组的最新值