Oracle資料庫中的字元處理技巧

2021-05-22 05:47:06 字數 3230 閱讀 5314

一、去掉尾部的空格字元。

有 時候在查詢或者進行其他處理的時候,需要把字串尾部的空格字元去掉。如有時候應用軟體設計的不合理,會把空格字元儲存在資料庫中。如在輸入產品品號的時 候,使用者不小心,把「dt001」輸成了「dt001 」。如果應用程式在設計的時候,能夠自動把尾部的空格去掉然後在儲存到資料庫中能夠就萬無一失了。但是不少的應用軟體在開發的時候沒有如此設計。這就給後 續的處理帶來了很多的麻煩。因為利用where語句來查詢記錄的時候,「dt001」(最後不帶空格)與「dt001 」(最後帶乙個空格)兩個是不同的條件。如果想利用這個條件來進行資料更新、查詢等等,就會遇到問題。為此在寫相關的update或者select語句的 時候,可能需要把後面的空格符號去掉。為此在oracle資料庫中,有很多種解決方式。如資料庫管理員可以使用ltrim函式來實現。這個函式的格式為 ltrim[c1,c2]。其作用是去掉c1左邊所包含的c2種的任何字元。當遇到不是c2種的字串時結束,然後返回剩餘的字串。如果把c2字串設 置為空格符號(預設情況下就是空格),那麼就可以把dt001後面的空格符號去掉了。

二、在頭部自動進行填充。

有時候可 能資料庫設計的時候,考慮的不夠周到,導致某些字段不夠大。在對資料庫進行公升級的時候,需要調整相關的字段。此時就可能需要對某個欄位的頭部進行填充,以 達到資料一致性的要求。如現在有個erp系統,其需要用到一張產品資訊的表,其中有乙個產品編號字段。剛開始在設計產品編碼的時候,設計的長度不夠,如只 設定了5位。隨著企業產品記錄的增多,需要對這個編碼的內容進行擴充套件。如產品資訊屬於包裝材料類的,需要在原來產品編號的頭部加入乙個字元 b;如產品資訊屬於客供品的,則需要在原來產品編號的頭部加入乙個字元c;如產品資訊屬於輔助材料的,則在原來的產品編號前面加入乙個字元f;等等。此時 該如何實現這個需求呢?難道要乙個個去修改嗎?現在這手工修改的工作量比較大,而且容易出錯,這個方法不可取。其實在oracle資料庫系統中提供了乙個 單行字元函式,可以幫助資料庫管理員與企業來解決這個問題。這個函式就是rpad函式。這個命令的格式為rpad(c1,n,c2)。這個函式的意識是在 c1的右邊填充字元c2,直到字串的總長度滿足n。預設情況下c2的值為空格,使用者可以根據自己的需要設定這個值。如果c1的長度比n要大,則會擷取 c1右邊的n個字元。現在如果要實現上面這個需求,則只需要設定函式rpad(產品編號,6,f)即可。由於原來的產品編號為5位,現在需要為輔助資訊的 產品編號前面加入乙個字元f,修改後的總長度變為6位。不過在使用這個函式的話,往往需要利用where條件語句進行限制。

現在這個函式 還可以裡用實現字串的擷取。如還是這個產品編號,其前面一位表示產品的種類。此時資料庫管理員就可以利用rpad(產品編號,1)來擷取產品編號的第一 位字元(這裡產品編號的長度比1要大,則會擷取產品右邊的1個字元,即產品類別標示碼)。這在報表設計的時候也非常有用,有利於簡化報表的顯示。

三、字元大小寫的控制。

在 做報表的時候,我們可能需要對字串的現實格式進行控制,如大小寫的顯示格式。另外,在進行資料庫移植的時候,可能以前的收入大小寫不規範。資料庫管理員 需要採用一定的規則來規範移植後的資料庫字串書寫規範。為了簡化這些需求的實現方式,在oracle資料庫中也提供了一些工具來解決這些問題。

如 以前在輸入產品編號的時,可能大小寫不區分。而在前台應用程式中也沒有進行這方面的控制。現在使用者希望所有的產品編號都為大寫,需要把原先是小寫的產品編 號全部轉換成大寫。此時如果產品數量比較多的話,顯然利用手工修改的方式會增加工作量。如果編寫乙個程式來實現的話,又太複雜,其實我們可以借鑑 oracle資料庫提供的字串處理函式來實現。在單行字元函式集中,有乙個函式upper,它的作用就是將全部字串都改寫為大寫並返回。為此我們可以 利用乙個子查詢或者借助檢視的幫助,把所有產品編號中,如果含有小寫字元的產品編號都更新為大寫。如果原來就是大寫的,就保持原樣(而不是說原來大寫的變 小寫,原來小寫的變大寫)。同理,既然小寫可以變大寫,那麼大寫也就可以變為小寫。利用單行字串函式lower,就可以把全部字串改為小寫輸出(把大 寫字母改為小寫,而小寫字元保持不變)。

另外乙個大小寫的控制原則比較複雜,如對於一些英文位址或者英文名字之類的字串,需要首個字母 大寫,而其他字元小寫。這個實現起來就有一定的難度。還好在oracle資料庫中提供了乙個現成的解決方法,即利用initchar函式來實現。這個函式 的功能是將某個欄位中每個單詞的首字元轉換為大小,其他字元都是小寫的字串。通常情況下,這個字段之間的單詞可以利用空格、控制字元或則標點符號來表 示。可見通過這個三個大小寫字串控制函式,可以優化字串的顯示格式,讓其顯示更加的規範。而結合update語句的話,還可以成批的在資料庫中進行更 新,讓其儲存的資料也符合規範化的要求。

四、字串中的複雜替換。

幾年之後,杭州進行來一些行政區劃的規格,如把下沙市 改為了直屬杭州管轄的下沙區。為此有一家企業的資料庫管理人員就問筆者,能否把一些記錄中的下沙市都改為下沙區。什麼意思呢?也就是說,在資料庫中可有含 有如下記錄「下沙市某某鋼鐵廠」、「杭州市某某服裝廠」、「濱江區某某資訊****」等等。現在資料庫管理員希望把含下沙市的內容都改為下沙區。這涉及到 一些複雜欄位的替換,實現起來具有一定的難度。資料庫是結構化資料的結合體,不比word文件,可以利用查詢替換功能來解決這個需求。那麼在oracle 資料庫中該如何實現呢?在oracle資料庫中就模擬實現了word文件中的查詢替換功能。

如在單行字元函式中有乙個叫做replace 的函式,就可以幫助資料庫管理員實現這個需求。這個函式的格式為replace(c1,c2,c3)。他的含義就彪死後把c1中出現的c2都替換成c3, 然後返回字串。這是什麼意思呢?其實就是跟word文件中的查詢替換功能類似。從字串c1種查詢 c2的內容,如果找到的話利用c3來代替。如果c3 的內容為空,則所有在字段中出現c2內容的字元都將被刪除。那要實現上面的需求,就可以把這個函式的引數設定為replace(adress,下沙市,下 沙區)。然後再利用upadate語句把這個函式返回的值賦值給位址字段即可。如此,在資料庫位址欄位中,出現下沙市的地方將全部被更新為下沙區。但是這 個更改不會影響到其他的記錄。如不會把杭州市也改為杭州區等等。

為此,要實現一些複雜的字元替換作業,可以利用函式replace來完 成。有時會,把replace函式與其他函式相結合,還可以實現一些更加複雜的內容。如在產品基本資訊中,產品編號中可能包含了產品的分類資訊,如 psd001這個產品編號,第乙個字元p表示成批,第二三個字元sd表示手動工具。如果自動工具的話就為pzd001。在生成報表的時候,如果利用這些字 符來顯示結果的話,顯然報表的可讀性並不是很好。此時資料庫管理員可以先利用字串擷取函式或者利用上面所提到過的頭部填充函式等等來擷取相關的字串, 然後再利用現在這個查詢替換函式,則可以把zd等字元轉換成「自動工具」等代表含義的字串,這將提高報表的可讀性。可見,將replace替換函式與其 他函式結合(c1、c2、c3引數都可以利用函式來實現)從而可以實現複雜的替換功能。

處理Oracle資料庫中的壞塊

一 什麼是資料庫的壞塊 首先我們來大概看一下資料庫塊的格式和結構 資料庫的資料塊有固定的格式和結構,分三層 cache layer,transaction layer,data layer。在我們對資料塊進行讀取寫入操作的時候,資料庫會對要讀寫的資料塊做一致性的檢查,其中包括 資料塊的型別 資料塊的...

Oracle 資料庫中的鎖 處理

1.診斷系統中的鎖 select no merge a no merge b no merge c wait status a.username,a.machine,a.sid,a.serial a.last call et seconds b.id1,c.sql text sql from v s...

oracle資料庫中字元亂碼

1.1 88.152 os已安裝中文包,以下確認os層面中文是否可以顯示 1.2 88.153 os沒有安裝中文包,以下確認os層面中文無法顯示 1.3 確認os層面登入88.152伺服器,檢視 oracle資料庫中中文字元是否正常顯示 1.3.1.88.152確認服務端字符集 1.3.2.確認os...