`

在hibernate中使用 case when的问题

阅读更多

最近由于项目的需要,对varcha2  字段 gbjh进行排序,其字段存的值有两种 一种是纯数字,一种是32-33这类型的值。

由于要使用case when进行判断排序,经过一番努力后在plsql里编写成功,并且能正常运行,写法如下:

order by to_number(substr(t.gbjh,0,case when instr(t.gbjh,'-',1,1)=0 then 4 else instr(t.gbjh,'-',1,1)-1 end))

 接下来引入 hibernate的hql语句中,报错。纠结4个小时。

 

最终正确的写法为:

order by to_number(substr(t.gbjh,0,case when instr(t.gbjh,'-',1,1)=0 then 4 else (instr(t.gbjh,'-',1,1)-1) end))

 也就是为 else 后面的 instr 加上括号。

 

额滴个神啊。4个小时的纠结啊。就2个括号~~~

分享到:
评论

相关推荐

    hibernate-shards.jar

    sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the ...

    hibernate_anoatation(中文版)

    @Formula("CASE WHEN gender = 'F' THEN 'Ms.' ELSE 'Mr.' END") private String title; ``` #### @Version - **用途**:用于实现乐观锁机制。 - **示例**: ```java @Version private int version; ``` #...

    hibernate所用到HQL经典语句大全

    使用`CASE WHEN...THEN...ELSE...END`可以在查询中进行条件判断,生成动态结果。 综上所述,HQL提供了一系列强大的查询功能,涵盖了从简单的数据检索到复杂的条件过滤和聚合分析。掌握这些基础和进阶的知识点对于...

    DB2、ORACLE

    - Oracle的DECODE函数在DB2中不支持,可以使用CASE WHEN语句替代,如`SELECT CASE WHEN f_areaid IS NULL THEN '空' ELSE f_areaid END FROM masa_user`。 7. **NVL函数**: - Oracle的NVL在DB2中需要使用...

    DB2 与ORACLE的比对.docx

    - ORACLE 的 DECODE 函数在 DB2 中不受支持,但可以使用 CASE WHEN 语句来实现相同的功能。 8. **NVL 函数**: - NVL 在 ORACLE 中用于处理 NULL 值,DB2 中对应的函数是 COALESCE,它们都能将 NULL 替换为指定的...

    数据库学习

    3. **时间倒序显示**:在MySQL中,如果需要时间字段为null的记录排在前面,并且按照时间倒序排列,可以使用`ORDER BY CASE WHEN ... END`,例如: ``` SELECT * FROM 表名 ORDER BY CASE WHEN IFNULL(字段名, '') ...

    DB2 与ORACLE的比对.pdf

    - ORACLE 的 DECODE 函数用于条件判断和返回值,DB2 不支持,但可以使用 CASE WHEN 语句替代。 8. **NVL 函数**: - ORACLE 的 NVL 用于处理 NULL 值,DB2 不支持 NVL,但可以使用 COALESCE 函数达到相同效果。 ...

    JAVA笔试题

    - **解释**: 在Java中,如果没有显式使用`break`语句,控制流将继续执行下一个`case`或`default`块,直到遇到`break`或到达`switch`语句的末尾。因此,这段代码将首先输出“default”,然后继续执行`case 0`块并输出...

    各种框架说明

    - **Choose-When-Otherwise**:类似于`CASE WHEN`结构,用于复杂的条件判断。 - **Foreach**:循环遍历集合或数组。 - **占位符**:`${}`和`#{}`分别表示字符串替换和预编译参数。 **关联关系** - **多对一**、**一...

    MyBatis 常见面试题总结.zip

    使用批量插入时,可以在SQL语句中使用批处理的占位符,如`<insert id="batchInsert"><foreach item="item" index="index" collection="list" open="INSERT INTO table (" close=") VALUES (" separator="),">...`。...

    36道面试常问的MyBatis面试题!.zip

    这些标签用于构建动态SQL,类似Java的if-else结构,对应switch,<when>对应case,对应default。 19. **MyBatis如何处理批量操作?** 可以使用Executor的batch()方法开启批量操作模式,然后执行多个insert、update...

    MyBatis面试专题.pdf

    - **作用**:MyBatis支持在XML映射文件中使用标签来构建动态SQL,实现逻辑判断和SQL拼接等功能。 - **动态SQL标签**: - `trim`:去除前缀或后缀文本,常用于去除多余的AND或OR等关键字。 - `where`:自动处理...

    mybatis学习笔记

    - `<choose>`, `<when>`, `<otherwise>`:类似于Java中的switch-case语句。 - `<trim>`:用于修剪SQL语句中的前缀、后缀或者空白字符等。 - `<foreach>`:用于处理多个参数或者数组集合的循环操作。 #### 八、...

    Java程序员面试题大全

    - 统计x字段不同情况的个数,以及输出条数大于200的情况:`SELECT COUNT(DISTINCT x) AS distinct_count, SUM(CASE WHEN count(x) > 200 THEN 1 ELSE 0 END) AS more_than_200 FROM (SELECT x, COUNT(*) FROM A ...

    MyBatis技术文档.pdf

    - 在 SQL 语句中使用 IN 子句实现。 3. **动态设置表名**: - 通过变量或表达式动态指定表名。 4. **添加功能获取自增的主键**: - 使用 `useGeneratedKeys="true"` 和 `keyProperty` 属性。 #### 八、自定义映射 ...

    java开发的岗位职责-java开发岗位职责.docx

    3. **条件判断:** 熟练使用CASE when end else语句。 4. **函数使用:** 熟悉使用Decode函数、日期函数等。 5. **视图管理:** 熟悉创建和修改视图。 6. **索引管理:** 熟练创建和修改索引。 7. **统计分析:** 熟练...

    Java面试经典题

    - 在 try 语句块内使用 return 语句时,finally 块内的代码总是会被执行,不论 try 语句块内是否抛出了异常。 - 如果 try 语句块内没有抛出异常,则 finally 块会在 return 语句之前执行。 - 如果 try 语句块内抛出...

    springframework.5.0.12.RELEASE

    HibernateTransactionManager (unintentionally) bound to Hibernate 5.2 SharedSessionContractImplementor [SPR-17557] #22089 Spring JavaMailSenderImpl does not show proper message when recipient list is ...

    java高级软件工程师面试题

    6. **SQL统计查询**:使用CASE WHEN THEN语句结合GROUP BY和COUNT函数完成复杂的聚合统计。 7. **火车速度问题**:通过建立数学模型计算火车速度,考虑少年与火车的相对运动。 8. **Oracle语句与存储过程**:掌握DDL...

Global site tag (gtag.js) - Google Analytics