文档章节

hibernate中hql的null替换表达式coalesce

java-苦苦甜甜
 java-苦苦甜甜
发布于 2012/11/01 14:18
字数 1421
阅读 9971
收藏 3

hql中常用函數介紹  

2010-01-22 15:48:58|  分类: 数据库 |字号 订阅

一、substring函數
此函數可以用在HQL語句的columns部分和where後面,主要目的可以對數據庫字段中的某數據進行按條件截取,並動態組合成自已想要的數據格式,具體使用方法如:
example: oldSid:812108M00003 -> newSid:08-M00003
hql = "select substring(oldSid,5, 2)+'-'+substring(oldSid,7,6) as newSid from Table";

substring()函數一般帶有三個參數,第一個為要格式化的源字段,第二個為開始執行的起始位置,(下標從臺開始),第三個參數為從開始位置起要截取幾位數據,所有上面語句的結果為:
newSid:08-M00003

另substring函數也可以用在where語句後面如:
hql = "from Table a where substring(a.description, 1, 3) = 'cat'";



二、子查詢的用法

假設現在有兩張表Company(公司表),Employee(員工表),關係一個公司有多個員工,所以一個company記錄應該對應多條employee紀錄.即在employee有一個 FK 指向Company的 PK.
condition:找出每一個公司中員工工資(pay)最高的那一位.
hql:
select (select max(e.pay) from c.Employee e) from Company c
note:select後面的子查詢必須寫在()中,
其運行後對應的sql語句為:
select
(select
max(e.pay)
from
Employee e
where
e.HSUID=c.HSUID) as col_0_0_
from
Company c;

hql中的子查詢也可以帶查詢條件如下面也可以寫成:
select (select max(e.pay) from a.employee e where e.name=:name) from company a
select
(select
max(e.pay)
from
Employee e
where
e.HSUID=c.HSUID and e.name = '01') as col_0_0_
from
Company c;


三、coalesce函数的用法

COALESCE
返回其参数中第一个非空表达式。

语法
COALESCE (expression [ ,...n ])

参数
expression

任何类型的表达式。
n

表示可以指定多个表达式的占位符。所有表达式必须是相同类型,或者可以隐性转换为相同的类型。   
返回类型
将相同的值作为 expression 返回。

注释
如果所有自变量均为 NULL,则 COALESCE 返回 NULL 值。

COALESCE(expression1,...n) 与此 CASE 函数等价:

CASE
WHEN (expression1 IS NOT NULL) THEN expression1
...
WHEN (expressionN IS NOT NULL) THEN expressionN
ELSE NULL   
   
示例:表score代表某同学本次考试各科成绩的得分.结构如下:
語文     數學     英語
58        NULL     95
95         NULL     0
NULL      NULL      34
NULL      NULL      NULL
0           95       NULL
0          0        0
NULL       95      95
95         NULL     NULL

hql:
select a from score a where coalesce(a.chinese,a.math,a.english) = 95;
執行後結果為:
95         NULL     0
NULL       95      95
95         NULL     NULL

(3 rows affected)
第一行因為a.chinese(語文)不空,所以where a.chinese = 95;return false;
第三行因為a.english = 34,所以return false;
第五行因為a.chinese = 0;標誌也不為空,所以return false;

四. ISNULL 函数和 NULLIF 函数

SQL Server里的 ISNULL 与 ASP 中的 IsNull不同,SQL Server 中有两个参数,语法:

ISNULL(check_expression, replacement_value)

  • check_expression 与 replacement_value 数据类型必须一致
  • 如果 check_expression 为 NULL,则返回 replacement_value
  • 如果 check_expression 不为 NULL,则返回 check_expression

NULLIF 用于检查两个表达式,语法:
NULLIF(expression, expression)

  • 如果两个 expression 相等,则返回 NULL,该 NULL 为第一个 expression 的数据类型
  • 如果两个 expression 不相等,则返回第一个 expression

    示例程式:

    函数表score代表某学生某此考試的數學和中文成績.數據如下:
    中文     數學
    25         36
    15         59
    68         68
    85         45
    96          95
    現要查詢某同學的兩門成績,要求分數不相等,如相等,則要求中文成績要超過85分以上.
    select a from Score a where nullif(a.chinese,a.math) >= 85;

    返回結果:
    85         45
    最後一條雖然第門功課成績都是well,但由於a.chinese == a.math,所以函數nullif會返回NULL,

    五. 于日期有关的数据函数(EXTRACT)
    EXTRACT

    ANSI标准中EXTRACT函数允许选取日期和时间中任意段或任意间隔的值,Teradata中EXTRACT函数支持日期数据中选取年.月.日.从时间数据中选取小时.分钟和秒,同时Hibernate也支持相应的函数运算.
    示例:

    SELECT DATE;   96/11/07
    SELECT EXTRACT(YEAR FROM DATE);     1996
    SELECT EXTRACT(MONTH FROM DATE+30); 12
    SLEECT EXTRACT(DAY FROM DATE+2);   09
    SELECT TIME;   14:52:32
    SELECT EXTRACT(HOUR FROM TIME); 14
    SELECT EXTRACT(SECOND FROM TIME+30);  
    INVALID TIME

    hql:
    select extract(second from a.orderTime) from ApOrderRequest a;

    六.LOCATE函数的用法

    locate函数返回第一个string在第二个string中的起始位置,如果第一个string或第二个string为空,则结果反回空(NULL),如果第一个字串中第二个中没有找见,则返回零(0),

    语法介绍:
    LOCATE( string1, string2 [, start] )

    string1:
    任何字串表达式,此字串作为一个字串对象去字串2中进行批配.

    string2:
    任何字串表达式,此字串包括第一个字串.

    start:
    从字串string2中搜寻string1是的起始位置,假如没有设置,或为NULL,或所赋值小于壹,则统一从1开始搜寻.

    Examples:

    DE<SELECT LOCATE( 'Peter', 'Peter Steve Tom' )DE<


    七.CAST函数的用法

    CAST 函数 [数据类型转换]

    功能:
    返回转换为提供的数据类型的表达式的值。
    语法:

    CAST(expression AS data type)

    参数:
    expression     要转换的表达式

    data type       目标数据类型

    用法:

    如果未指定字符串类型的长度,数据库服务器将选择适当的长度。如果没有为十进制转换指定精度和小数位数,则数据库服务器将选择适当的值。

    示例

    下面的函数确保字符串被用作日期:
    SELECT CAST( '2000-10-31' AS DATE )

    计算表达式 DE<1 + 2DE< 的值,并将结果转换为单字符字符串。
    SELECT CAST( 1 + 2 AS CHAR )

    可以使用 CAST 函数缩短字符串:
    SELECT CAST( 'Surname' AS CHAR(5) )

本文转载自:http://blog.163.com/zhajie@126/blog/static/771742002010022348585/

上一篇: java生产校验码
java-苦苦甜甜
粉丝 19
博文 157
码字总数 15880
作品 0
厦门
私信 提问
hql中写nvl函数

hibernate中的hql语法coalesce类似于oracle中的nvl函数

~少司命~
2015/11/25
533
0
hibernate hql 大全

转自:http://www.cnblogs.com/bobomail/archive/2005/09/20/240352.html Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是不要被语法结构 上的相似所迷惑,HQL是非常有...

ForingY
2015/11/25
53
0
hibernate HQL查询

Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态 和关联之类的...

长平狐
2013/01/06
308
0
SQL中的Null值

Null是表示一种“未知”的类型,除了SQL已定义的数据类型外其他都是“未知”的类型。 Null不支持大小/相等判断 判读是否是Null的方式是使用is null 或者 is not null [not] in 与 Null Null与...

蜡笔小白
2016/10/14
8
0
Hibernate Query数据查询

主要由三种查询:HQL查询、Criteria条件查询、SQL查询。 以下分别讲解 1. HQL查询 HQL(Hibernate Query Language)查询提供了更加丰富和灵活的查询特性,因此Hibernate将HQL查询立为官方推荐的...

疯子船长
2015/10/26
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

Nginx提供下载apk服务

有时候我们可能需要提供文件或者其他apk下载链接,通过 nginx 配置可以很简单地实现。 server {    listen 80;    server_name download.xxx.com;    root app;    locati...

Jack088
3分钟前
0
0
系统监控-与应用高度耦合的Javamelody监控工具

1. 为什么不使用Javamelody? 与应用高度耦合,需要在项目中配置相关的配置文件和引入对应的依赖jar、能监控的功能有限,主要功能如下: 系统信息 可通过pdf下载监控信息 内存、CPU、磁盘、H...

秋日芒草
3分钟前
0
0
mysql基本语句

好久没用sql了,好多都忘记了,正好昨天做题碰上,今天就回顾一下吧! 0.题目如下(以下适用mysql来解答): 1.数据准备: 在notepad++(当然你可以通过其他方式来编写)中编写sql脚本如下: 2.通...

不最醉不龟归
12分钟前
0
0
前端程序员需要具备的几个软实力,你具备了吗

有很多关于前端程序员的调侃,比如“智商很高情商却很感人,思维缜密,极客,加班严重,没有对象只能new一个……”,虽然不是所有前端程序员都是这样,但这也说明了前端程序员这个群体中存在...

智云编程
13分钟前
0
0
Golang math基本数学函数

三角函数 正弦函数,反正弦函数,双曲正弦,反双曲正弦 func Sin(x float64) float64 func Asin(x float64) float64 func Sinh(x float64) float64 func Asinh(x float64) float64 一次性返回......

Sunki
45分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部