《Oracle SQL疑難解析》 1 14 排序

2021-09-23 15:58:19 字數 1731 閱讀 8683

oracle sql疑難解析

我們的文字資料混合了大寫、小寫字母和句子(英文句子,指第乙個字母大寫,後續字母小寫)。我們希望把這些資料按字母順序、大小寫順序進行排列。

我們先在hr.employees表中建立一些混合大小寫的資料。執行下面的update語句,把william smith's的姓(last_name)改為大寫:

update hr.employees

set last_name = 'smith'

where employee_id = 171;

下面的select語句要求按oracle預設的排序方式顯示根據last_name排序的結果:

select last_name

from hr.employees

order by last_name;

last_name

---------

…rogers

russell

smith

sarchand

sciarra

seosewall

smith

stiles

sullivan

聰明的讀者可能已經猜到了排序結果。oracle預設用二進位制的排序方法。在上面這個簡單的例子中,文字是按它們在**頁上對應數值的大小來排列的。編碼可以是us7ascii,weiiso8859p1或其他編碼方式。在這些**頁上,大、小寫字母有不同的值,大寫的值排在前面。這就是為什麼上面查詢結果中smith排在所有以「s」開頭的姓的最前面。

人們通常希望看見兩個「smith」排在一起,忽略大小寫。用這個nls環境變數可以達到目的:

alter session set nls_sort='binary_ci';

select last_name

from hr.employees

order by last_name;

last_name

---------

…rogers

russell

sarchand

sciarra

seosewall

smith

smith

stiles

sullivan

oracle支援區分大小寫和不區分大小寫兩種排序方式。有個環境變數nls_sort進行區分大小寫和不區分大小寫的控制。預設的排序操作區分大小寫,即nls_sort=binary。如果我們希望排序按照不區分大小寫的方式,則需把環境變數nls_sort設定為binary_ci。

顧名思義,nls_sort僅僅影響排序結果,並不對其他大小寫操作構成影響。即使把nls_sort設定為binary_ci,以不區分大小寫的方式比較資料的操作仍然延續了oracle預設的方式:

select first_name, last_name

from hr.employees

where last_name like 's%';

no rows selected

對以上結果別灰心。oracle想到了你的需求,也提供了不區分大小寫的比較方式。

比較傳統的方式不是使用nls環境變數,而是用upper和lower函式把要比較的欄位名、文字都轉成大寫或小寫後再比較。這種方法的不足之處在於,使用函式後,標準的索引就不能使用了,優化器無法工作,應對的方式是使用基於功能的索引(function-based index)。

《Oracle SQL疑難解析》 第1章 基礎

oracle sql疑難解析 本章針對sql語句的核心構建模組,羅列了很多的基本操作訣竅,以便讓初學者快速上手,或者讓有經驗的讀者重溫技術關鍵點。本章主要內容包括對oracle資料庫表中資料的查詢 更改 刪除,以及進行此類操作時需要輸入的一些常用的選項。對那些已有很好sql基礎的人員,我們建議選擇性...

Oracle SQL 疑難解析讀書筆記(一 基礎)

1.在語句中找到和消除空值 select first name,last name from hr.employees where commission pct is null is null 和 is not null null值不跟任何值相等 任何值不和null相等,null不等於null。2....

《IP路由協議疑難解析》一導讀

ip路由協議疑難解析 隨著internet的極速發展,網路工程師在網路的構建 維護和排障方面所要付出的努力也將成倍增長。由於網路故障的排除工作是一項需要專案經驗積累的實用性技能,因此為了滿足快速增長的internet的運維需求,降低網路技術的學習難度,讓網路工程師盡快掌握各種排障技能,就成為了重中之...