問題:oracle字串函數;結果:Oracle字串函數

來源:互聯網
上載者:User

標籤:

Oracle字串函數

最近換了新公司,又用回Oracle資料庫了,很多東西都忘記了,只是有個印象,這兩晚抽了點時間,把oracle對字串的一些處理函數做了一下整理,供日後查看。。

平常我們用Oracle主要有兩種字串類型
1.char始終為固定的長度,如果設定了長度小於char列的值,則Oracle會自動用空格填充的。當比較char時,Oracle用空格將其填充為等長,再進行比較。
2.VarChar2資料類型為可變長度,雖然與VarChar資料類型是同義的,但在今後的Oracle版本中也許會有變化,所以應該避免使用VarChar,優先使用VarChar2。
固定長度的字串欄位使用Char,而其他所有的字串欄位都應使用VarChar2.

下面列出部分Oracle針對字串操作的一些函數,以下函數可以使用在字串上,也可以使用在列名上:
1.LOWER(string) 將輸入的字串轉換成小寫
2.UPPER(string) 將輸入的字串轉換成大寫
3.INITCAP(string) 將輸入的字串單詞的首字母轉換成大寫。PS:如果不是兩個字母連在一起,則認為是新的單詞,例:a_b a,b  a b  類似前面這些情況,都a和b都會轉換成大寫
4.串連符(||),將兩個字串用||串連起來,除此之外還可以使用Concat函數來連接字串。例:select CONCAT(City,country) from Table
5.LPAD和RPAD,填充函數,這是兩個十分相似的函數,使用方式完全一樣。允許在列的左[右]邊填充一組字元。例:RPAD(city,20,‘.‘),如果ciy的值沒有小於長度20的話,則用‘.‘在右邊補齊,補到20個,如果是用空格補齊,看上去就是像靠左對齊一樣。
6.LTRIM,RTRIM和TRIM,他們的作用是從字串的左邊,右邊,左右兩邊刪除不需要的字元,預設時刪除空格。
格式:RTRIM、LTRIM(字串,‘刪除字元集‘) 第一個參數就是要進行刪除的字元,第二個參數是一個字元集來的,如果填寫的是‘AB‘,Oracle會認為是A和B,然後反覆檢查字串的右端,直到字串中的每個字元都被刪除了,也就是說,直到遇到被刪除字元集中未出現的第一個字元時,才停止刪除。這樣講可能有點不是很明白,看下面例子
原資料
1 AAA.
2 AAA."
3 AA.AAB
RTRIM(name,‘.B"‘)
1 AAA
2 AAA
3 AA.AA
如果覺得不夠明白的話,自己試多幾次就明白了!我也覺得講得好像不是很清楚一樣!
TRIM格式有點不一樣,直接看例子吧 select trim(‘A‘ from 列名) from tableName 或者trim(leading ‘A‘ from 列名)或者trim(trailing ‘A‘ from 列名) 等價於LTRIM和RTRIM函數一樣,其實TRIM函數就只是為了簡化代碼而以。
7.LENGTH 該函數很簡單,就是告訴使用者一個字串有多長,即字串中有多少個字元,該函數本身並不是很好用,但可以做為其它函數的一部分,用於計算表格需要多少空格,或者做為orderby 子句的一部分。PS:您不能對一個使用LONG資料類型的列使用LENGTH之類的函數。
8.SUBSTR(string,start [,count]) 該函數告訴oracle提取出string一個子集,start開始位置,count提取長度,不指定count時,預設提取到該字串的尾部。
  start同時也可以指定為負數,指定為正數的時候是從字串的起始位置開始算(左邊),指定負數時,是從末尾位置算(右邊)。PS:負數不能使用於Char資料類型,因為Char是固定長度的,   所以將使用空格填充他們的值,直到擴充到列的全長。
9.INSTR 返回指定的字串所在的位置
  INSTR(string,set[,start [,occurrence ] ] ) 如果指定start,oracle則跳過前面所有字串到該位置開始搜尋,occurence,是強迫instr跳過前幾次與字串匹配,給出下一次匹配的位置,如果occurence指定3,那就是匹配第三次的位置了。 例 instr(‘ABACAAA‘,‘A‘,2,2) 從ABACAAA中匹配A這個字串,從2個位置開始匹配,匹配第2次A所在的位置。PS:如果set中不止有一個字元而是有幾個字元組成的,則INSTR給出該字元集中的第一個字元的位置。
10.Chr和ascii函數在即席查詢中很少使用。Chr把數值轉換成等價的ascii字串 例:select chr(70) from dual
        ascii函數執行的結果剛好是相反的,傳遞給他字串,它將轉換成對應的數值(只轉換第一個字串),如果需要同時轉換多個字串可以使用DUMP函數 DUMP(string)

PS:INSTR,REPLACE和SUBSTR的功能已經得到擴充,可以支援Regex。

通過以上函數可以單獨使用或者組合使用,這是一個簡單的過程,即將簡單的邏輯步驟組合起來完成非常複雜的任務。

後續應該還會有一些Oracle方面的日誌記錄吧。。

 

字元函數——返回字元值

這些函數全都接收的是字元族類型的參數(CHR 除外)並且返回字元值.除了特別說明的之外,這些函數大部分返回VARCHAR2類型的數值.字元函數的傳回型別所受的限制和基本資料庫類型所受的限制是 相同的,比如: VARCHAR2數值被限制為2000字元(ORACLE 8中為4000字元),而CHAR數值被限制為255字元(在ORACLE8中是2000).當在過程性語句中使用時,它們可以被賦值給VARCHAR2 或者CHAR類型的PL/SQL變數.

CHR

文法: chr(x)

功能:返回在資料庫字元集中與X擁有等價數值的字元。CHR和ASCII是一對反函數。經過CHR轉換後的字元再經過ASCII轉換又得到了原來的字元。

使用位置:過程性語句和SQL語句。

CONCAT

文法: CONCAT(string1,string2)

功能:返回string1,並且在後面串連string2。

使用位置:過程性語句和SQL語句。

INITCAP

文法:INITCAP(string)

功能:返回字串的每個單詞的第一個字母大寫而單詞中的其他字母小寫string。單詞是用.空格或給字母數字字元進行分隔。不是字母的字元不變動。

使用位置:過程性語句和SQL語句。

LTRIM

文法:LTRIM(string1,string2)

功能:返回刪除從左邊算起出現在string2中的字元的string1。String2被預設設定為單個的空格。資料庫將掃描string1,從最左邊開始。當遇到不在string2中的第一個字元,結果就被返回了。LTRIM的行為方式與RTRIM很相似。

使用位置:過程性語句和SQL語句。

NLS_INITCAP

文法:NLS_INITCAP(string[,nlsparams])

功能:返回字串每個單詞第一個字母大寫而單詞中的其他字母小寫string,nlsparams

指定了不同於該會話預設值的不同排序序列。如果不指定參數,則功能和INITCAP相同。Nlsparams可以使用的形式是:

‘NLS_SORT=sort’

這裡sort制訂了一個語言排序序列。

使用位置:過程性語句和SQL語句。

NLS_LOWER

文法:NLS_LOWER(string[,nlsparams])

功能:返回字串中的所有字母都是小寫形式的string。不是字母的字元不變。

Nlsparams參數的形式與用途和NLS_INITCAP中的nlsparams參數是相同的。如果nlsparams沒有被包含,那麼NLS_LOWER所作的處理和LOWER相同。

使用位置;過程性語句和SQL語句。

NLS_UPPER

文法:nls_upper(string[,nlsparams])

功能:返回字串中的所有字母都是大寫的形式的string。不是字母的字元不變。nlsparams參數的形式與用途和NLS_INITCAP中的相同。如果沒有設定參數,則NLS_UPPER功能和UPPER相同。

使用位置:過程性語句和SQL語句。

REPLACE

文法:REPLACE(string,search_str[,replace_str]

功能:把string中的所有的子字串search_str用可選的replace_str替換,如果沒有指定replace_str,所有的string中的子字串search_str都將被刪除。REPLACETRANSLATE所提供的功能的一個子集。

使用位置:過程性語句和SQL語句。

RPAD

文法:RPAD(string1,x[,string2])

功能:返回在X 字元長度的位置上插入一個string2中的字元的string1。如果string2的長度要比X字元少,就按照需要進行複製。如果string2多於 X字元,則僅string1前面的X各字元被使用。如果沒有指定string2,那麼使用空格進行填充。X是使用顯示長度可以比字串的實際長度要長。 RPAD的行為方式與LPAD很相似,除了它是在右邊而不是在左邊進行填充。

使用位置:過程性語句和SQL語句。

RTRIM

文法: RTRIM(string1,[,string2])

功能: 返回刪除從右邊算起出現在string1中出現的字元string2. string2被預設設定為單個的空格.資料庫將掃描string1,從右邊開始.當遇到不在string2中的第一個字元,結果就被返回了RTRIM的行為方式與LTRIM很相似.

使用位置:過程性語句和SQL語句。

SOUNDEX

文法: SOUNDEX(string)

功能: 返回string的聲音表示形式.這對於比較兩個拼字不同但是發音類似的單詞而言很有協助.

使用位置:過程性語句和SQL語句。

SUBSTR  截取子串

文法: SUBSTR(string,a[,b])

功能: 返回從a位置開始的b個字元長的string的一個子字串. 第一個字元的位置是1. 如 果a是0,那麼它就被認為從第一個字元開始.如果是正數,返回字元是從左邊向右邊進行計算的.如果b是負數,那麼返回的字元是從string的末尾開始從 右向左進行計算的.如果b不存在,那麼它將預設的設定為整個字串.如果b小於1,那麼將返回NULL.如果a或b使用了浮點數,那麼該數值將在處理進行 以前首先被卻為一個整數.

使用位置:過程性語句和SQL語句。

TRANSLATE

文法: TRANSLATE(string,from_str,to_str)

功能: 返回將所出現的from_str 中的每個字元替換為to_str中的相應字元以後的string. TRANSLATE是REPLACE所提供的功能的一個超集.如果from_str比to_str長,那麼在from_str中而不在to_str中而外 的字元將從string中被刪除,因為它們沒有相應的替換字元. to_str不可為空.Oracle把Null 字元串認為是NULL,並且如果TRANSLATE中的任何參數為NULL,那麼結果也是NULL.

使用位置:過程性語句和SQL語句。

UPPER

文法: UPPER(string)

功能: 返回大寫的string.不是字母的字元不變.如果string是CHAR資料類型的,那麼結果也是CHAR類型的.如果string是VARCHAR2類型的,那麼結果也是VARCHAR2類型的.

使用位置: 過程性語句和SQL語句。

F.2 字元函數——返回數字

這些函數接受字元參數回數字結果.參數可以是CHAR或者是VARCHAR2類型的.儘管實際下許多結果都是整數值,但是返回結果都是簡單的NUMBER類型的,沒有定義任何的精度或刻度範圍.

ASCII

文法: ASCII(string)

功能: 資料庫字元集返回string的第一個位元組的十進位表示.請注意該函數仍然稱作為ASCII.儘管許多字元集不是7位ASCII.CHR和ASCII是互為相反的函數.CHR得到給定字元編碼的響應字元. ASCII得到給定字元的字元編碼.

使用位置: 過程性語句和SQL語句。

INSTR

文法: INSTR(string1, string2[a,b])

功能: 得到在string1中包含string2的位置. string1時從左邊開始檢查的,開始的位置為a,如果a是一個負數,那麼string1是從右邊開始進行掃描的.第b次出現的位置將被返回. a和b都預設設定為1,這將會返回在string1中第一次出現string2的位置.如果string2在a和b的規定下沒有找到,那麼返回0.位置的 計算是相對於string1的開始位置的,不管a和b的取值是多少.

使用位置: 過程性語句和SQL語句。

INSTRB

文法: INSTRB(string1, string2[a,[b]])

功能: 和INSTR相同,只是操作的對參數字元使用的位置的是位元組.

使用位置: 過程性語句和SQL語句。

LENGTH

文法: LENGTH(string)

功能: 返回string的位元組單位的長度.CHAR數值是填充空格類型的,如果string由資料類型CHAR,它的結尾的空格都被計算到字串長度中間.如果string是NULL,返回結果是NULL,而不是0.

使用位置: 過程性語句和SQL語句。

LENGTHB

文法: LENGTHB(string)

功能: 返回以位元組為單位的string的長度.對於單一位元組字元集LENGTHB和LENGTH是一樣的.

使用位置: 過程性語句和SQL語句。

NLSSORT

文法: NLSSORT(string[,nlsparams])

功能: 得到用於排序string的字串位元組.所有的數值都被轉換為位元組字串,這樣在不同資料庫之間就保持了一致性. Nlsparams的作用和NLS_INITCAP中的相同.如果忽略參數,會話使用預設排序.

使用位置: 過程性語句和SQL語句。

問題:oracle字串函數;結果:Oracle字串函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.