读书人

Hql的惯用函数

发布时间: 2012-08-30 09:55:54 作者: rapoo

Hql的常用函数
一、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) )



读书人网 >软件架构设计

热点推荐