`
usenrong
  • 浏览: 515474 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

按出生日期统计年龄段oracle原生SQL和hibernate中查询设计

 
阅读更多
 select agerange ,count(*) as count from
(
 select 
 case 
     when to_char(sysdate,'yyyy')-to_char(birthdate,'yyyy') >= '0' and to_char
        (sysdate,'yyyy')-to_char(birthdate,'yyyy') < '20' then '20岁以下'

      when to_char(sysdate,'yyyy')-to_char(birthdate,'yyyy') >= '20' and to_char
      (sysdate,'yyyy')-to_char(birthdate,'yyyy')<='30' then '20-30'

       when to_char(sysdate,'yyyy')-to_char(birthdate,'yyyy') >= '30' and to_char
       (sysdate,'yyyy')-to_char(birthdate,'yyyy')<='40' then '30-40' 

       when to_char(sysdate,'yyyy')-to_char(birthdate,'yyyy') >= '40' and to_char
       (sysdate,'yyyy')-to_char(birthdate,'yyyy')<='50' then '40-50' 

       when to_char(sysdate,'yyyy')-to_char(birthdate,'yyyy') >= '50' and to_char
       (sysdate,'yyyy')-to_char(birthdate,'yyyy')<='60' then '50-60' 

       when to_char(sysdate,'yyyy')-to_char(birthdate,'yyyy') >'60'  then '60岁以上' 
       end 
       as agerange from hr_resume
)
group by agerange

    根据数据库表中的出生日期统计出各个年龄段的人数,在oracle中测试通过

 

 

 

hibernate HQL函数

写道
√通过 ⊙测试没结果,但没出错 ×未通过

方法 说明 类型 支持 测试结果HQL 使用方法

ABS(n) 取绝对值 数学函数 JPA QL HQL √ ABS(column_name[数字类型对象属性])
SQRT(n) 取平方根 数学函数 JPA QL HQL √ SQRT(column_name[数字类型对象属性])
MOD(x,y) 取余数 数学函数 JPA QL HQL √ MOD([对象属性(数字)或值],[对象属性(数字)或值]) 数字必须是整型。返回参数1/参数2得的余数。
SIZE(c) 方法集合内对象数量 集合函数 JPA QL HQL
MINELEMENT(c) 返回集合中最小元素 集合函数 HQL
MAXELEMENT(c) 返回集合中最大元素 集合函数 HQL
MININDEX(c) 返回索引集合最小索引 集合函数 HQL
MAXINDEX(c) 返回索引集合最大索引 集合函数 HQL
CONCAT(s1,s2) 连接连个字符串 字符串函数 JPA QL HQL √ CONCAT([对象属性],[对象属性]) 相当与“||”
SUBSTRING(s,offset,length) 返回部分字符串 字符串函数 JPA QL HQL √ SUBSTRING([要截取的字符串属性字段],开始位置,截取长度)
TRIM([[ BOTH | LEADING 去掉字符串中的某个给定的字符.
| TRAILING]] char FROM s) 默认去掉字符串两面的空格. 字符串函数 JPA QL HQL √ 默认用法,TRIM([字符串对象属性列]) 将字段两端的空格去掉。
LOWER(s) 小写 字符串函数 JPA QL HQL √ LOWER([字符串对象属性列]) 将该列结果含有的字母全部大写
UPPER(s) 大写 字符串函数 JPA QL HQL √ UPPER([字符串对象属性列]) 将该列结果含有的字母全部大写
LENGTH(s) 返回字符串长度 字符串函数 JPA QL HQL √ LENGTH(字段名) 返回字段内容的长度,包括数字。null值返回null.
CURRENT_DATE() 返回数据库当前日期 时间函数 JPA QL HQL √ CURRENT_DATE() 返回数据库当前日期
CURRENT_TIME() 时间 时间函数 √ CURRENT_TIME() 返回数据库当前时间
CURRENT_ 时间戳
TIMESTAMP()
SECOND(d) 从日期中提取具体参数分别为: 时间函数 HQL √ SECOND(时间字段) 空的时候返回null
MINUTE(d) 秒,分,小时,天,月,年 √ 同上
HOUR(d) √ 同上
DAY(d) √ 同上
MONTH(d) √ 同上
YEAR(d) √ 同上
CAST(t as type) 强制类型转换 转换函数 HQL √ CAST([字段或值] as [要转换的类型-int,string...])
max()
min()
count() 

 

 

 

hibernate试了好几种方法总是报hql错误,最后只得用nativesql完成 ,下面贴出错误的写法望哪位大侠帮我看看正确的hql该咋写

错误一HQL写法

 

        String hql1 =" select agerange ,count(agerange) as count from "+
            "(select case "+ 
            " when year(current_date())-year(r.birthdate) >= 0  and year(current_date())-year(r.birthdate) < 20 then '20岁以下' "+

             " when year(current_date())-year(r.birthdate) >= 20 and year(current_date())-year(r.birthdate)<= 30 then '20-30' "+
             
             " when year(current_date())-year(r.birthdate) >= 30 and year(current_date())-year(r.birthdate)<= 40 then '30-40' "+
             
             " when year(current_date())-year(r.birthdate) >= 40 and year(current_date())-year(r.birthdate)<= 50 then '40-50' "+
             
             " when year(current_date())-year(r.birthdate) >= 50 and year(current_date())-year(r.birthdate)<= 60 then '50-60' "+
             
             " when year(current_date())-year(r.birthdate) > 60  then '60岁以上'  end as agerange from Resume r"+
             " )group by agerange"; 

 错误二HQL写法

        String hql2= "select " +
            " sum(case when year(current_date())-year(r.r.birthdate) >= 0  and year(current_date())-year(r.birthdate) < 20 then 1 else 0 end),"+
            " sum(case when year(current_date())-year(r.birthdate) >= 20 and year(current_date())-year(r.birthdate)<= 30 then 1 else 0 end),"+
            " sum(case when year(current_date())-year(r.birthdate) >= 30 and year(current_date())-year(r.birthdate)<= 40 then 1 else 0 end),"+
            " sum(case when year(current_date())-year(r.birthdate) >= 40 and year(current_date())-year(r.birthdate)<= 50 then 1 else 0 end),"+
            " sum(case when year(current_date())-year(r.birthdate) >= 50 and year(current_date())-year(r.birthdate)<= 60 then 1 else 0 end),"+
            " from Resume r where 1=1 group by r.birthdate ";

 正确的NativeSql写法

 

        String nativeSQL="select agerange ,count(*) as count from"+
"(select case"+
"      when to_char(sysdate,'yyyy')-to_char(birthdate,'yyyy') >= '0' and to_char (sysdate,'yyyy')-to_char(birthdate,'yyyy') < '20' then '20岁以下' "+

"      when to_char(sysdate,'yyyy')-to_char(birthdate,'yyyy') >= '20' and to_char (sysdate,'yyyy')-to_char(birthdate,'yyyy')< '30' then '20岁~29岁' "+

"       when to_char(sysdate,'yyyy')-to_char(birthdate,'yyyy') >= '30' and to_char (sysdate,'yyyy')-to_char(birthdate,'yyyy')< '40' then '30岁~39岁' "+

"       when to_char(sysdate,'yyyy')-to_char(birthdate,'yyyy') >= '40' and to_char (sysdate,'yyyy')-to_char(birthdate,'yyyy')< '50' then '40岁~50岁' "+

"       when to_char(sysdate,'yyyy')-to_char(birthdate,'yyyy') >= '50' and to_char (sysdate,'yyyy')-to_char(birthdate,'yyyy')<='60' then '50岁~60岁' "+

"       when to_char(sysdate,'yyyy')-to_char(birthdate,'yyyy') >'60'  then '60岁以上' end as agerange from hr_resume "+
") group by agerange ";
        List<Object[]> list =  this.getSession().createSQLQuery(nativeSQL).list();
        return list;
 


 
  • 大小: 74.1 KB
分享到:
评论
1 楼 usenrong 2012-04-01  
根据时间段 出生日期 统计数量

相关推荐

    oracle SQL查询工具

    oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具...

    sql查询oracle时间段操作

    在SQL查询中对Oracle数据库进行时间段操作是一项关键技能,特别是在数据恢复和历史数据分析时。Oracle数据库提供了多种方式来处理时间范围的数据,包括SQL查询、闪回功能和快照。下面我们将详细探讨这些知识点。 ...

    Oracle sql查询当前月的所有日期

    在Oracle数据库环境中,进行日期相关的查询是常见的需求之一。...同时,本文还介绍了几个Oracle SQL中处理日期的重要函数和技巧,希望对你有所帮助。在实际应用中,根据具体需求灵活运用这些技术可以大大提高工作效率。

    使用Oracle的SQL函数实现工作日和节假日分组统计.pdf

    使用Oracle的SQL函数实现工作日和节假日分组统计 本文介绍了使用Oracle的SQL函数来实现工作日和节假日的分组统计,通过对工作日和节假日的判断和统计,可以更好地合理调度人力物力资源,制定节假日劳务补贴政策。...

    Oracle的SQL分页实践

    在Oracle数据库中,SQL分页是一种非常常见的查询技术,它允许我们从大量数据中按需获取一部分结果,而不是一次性加载所有记录。这对于提高用户体验和优化系统性能至关重要,尤其是在处理大数据量的Web应用中。本实践...

    ORACLE_SQLDeveloper使用教程

    本文详细介绍了如何使用 Oracle SQL Developer 和其他开发工具,包括 Oracle Database Home Page 的使用方法、如何在 Oracle 中使用 SQL*Plus、如何使用 SQL Developer 操作 Oracle 数据库以及如何执行 SQL 语句等...

    Oracle与SQLServer的SQL语法差异

    Oracle与SQLServer的SQL语法差异,用简单易懂的语言和实例对Oracle和Sql Server语法之间的差异进行了对比分析,更加适用于入门的人

    oracle查看执行最慢与查询次数最多的sql语句

    本文将详细介绍如何查看Oracle数据库中执行最慢和查询次数最多的SQL语句,以帮助DBA(数据库管理员)识别潜在的性能瓶颈。 首先,我们来看如何查询执行最慢的SQL语句。在Oracle中,可以使用`v$sqlarea`视图来获取...

    Oracle PL SQL程序设计 中文第五版 上册

    《oracle pl/sql程序设计(第5版)(上下册)》基于oracle数据库11g,从pl/sql编程、pl/sql程序结构、pl/sql程序数据、pl/sql中的sql、pl/sql应用构建、高级pl/sql主题这6个方面详细系统地讨论了pl/sql以及如何有效地...

    Oracle SQL 官方文档

    Oracle SQL 是一种强大的数据库查询和编程语言,广泛用于管理和操作Oracle数据库系统。11g第二版(11G2)是Oracle的一个重要版本,提供了许多增强功能和优化。本官方文档集包括四份重要的参考资料,涵盖了Oracle SQL...

    oracle Mysql sql2000 的Hibernate驱动Jar

    标题中的“Oracle MySQL SQL2000 的Hibernate驱动Jar”是指在Java开发中,用于连接这三种不同数据库的Hibernate框架所需的驱动程序集。Hibernate是一个开源的对象关系映射(ORM)框架,它允许开发者使用面向对象的...

    oracle sql 根据年份、周数取日期

    在Oracle SQL中,根据年份和周数获取特定日期是一个常见的需求,特别是在处理时间序列数据或进行周期性分析时。本文将深入探讨如何利用Oracle SQL的功能来实现这一目标,包括理解Oracle中的日期函数、如何计算特定...

    Oracle–查询时间段内执行的sql、Produce

    1.查询时间段内执行的sql、Produce select * from v$sqlarea a where 1=1 and a.LAST_ACTIVE_TIME &gt;= to_date( '2013-02-21 18:23:00','yyyy-MM-dd HH24:mi:ss') and a.LAST_ACTIVE_TIME &lt; to_date( '2013-...

    oracle经典sql多表查询,sql统计

    以上只是Oracle SQL多表查询和统计功能的一部分,实际使用中还有更多的复杂查询和统计技巧,例如子查询、窗口函数、集合操作等。通过持续学习和实践,你可以掌握这些技能,提高在Oracle数据库中的数据处理能力。

    Oracle Sql语句转换成Mysql Sql语句

    在数据库管理领域,Oracle SQL和MySQL SQL是两种广泛使用的SQL方言,它们在语法和功能上存在一定的差异。当需要将一个基于Oracle SQL的应用程序迁移到MySQL环境时,就需要进行SQL语句的转换工作。本项目提供了一个...

    hibernate 调用oracle函数

    总的来说,Hibernate调用Oracle函数涉及到了数据库设计、ORM框架的使用、原生SQL查询和结果映射等多个方面,熟练掌握这些技能对于开发高质量的企业级应用至关重要。希望这篇文章能帮助你更好地理解和应用这些知识。

    ORACLE 19C SQL调优指南 中文版 Oracle DBA

    Oracle 19C SQL调优是数据库管理员(DBA)日常工作中不可或缺的一部分,它涉及到优化SQL查询性能,提高数据库系统的整体效率。本指南针对Oracle 19C版本,提供了丰富的调优策略和技术,旨在帮助DBA们更好地管理和维护...

    Oracle SQL(SQL for Oracle)

    在Oracle SQL中,有以下几个关键知识点: 1. **数据类型**:Oracle支持多种数据类型,包括数值型(如NUMBER)、字符串型(如VARCHAR2和CHAR)、日期/时间型(如DATE)、二进制大对象(BLOB)等。理解这些数据类型...

    SqlDbx连接oracle

    SqlDbx是一款轻量级的数据库管理工具,特别适合于SQL查询和数据库开发。它以其直观的用户界面和对多种数据库系统的支持而受到青睐,包括Oracle。本篇将详细介绍如何使用SqlDbx连接到Oracle数据库,以及涉及的相关...

    Oracle数据库sql语句 跟踪器

    Oracle数据库SQL语句跟踪器,通常被称为SQL Monitor,是一种强大的工具,用于监控和分析数据库中的SQL语句执行情况。在Oracle环境中,理解SQL语句的行为是优化数据库性能的关键。SQL Monitor提供实时视图,帮助DBA...

Global site tag (gtag.js) - Google Analytics