hibernate中hql的null替換表達式coalesce

hql中經常使用函數介紹  

2010-01-22 15:48:58|  分類: 數據庫 |字號 訂閱 sql

1、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'";



2、子查詢的用法

假設現在有兩張表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;


3、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 函數

express

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) spa

  • 若是兩個 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開始搜尋. blog

    Examples: ip

    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) )

相關文章
相關標籤/搜索