ITPub博客

首页 > 数据库 > Oracle > Oracle   SQL函数(二)

Oracle   SQL函数(二)

Oracle 作者:Iamsufferingfre 时间:2013-12-07 21:36:02 0 删除 编辑

1.1  字符函数

字符函数领受字符参数,那些字符可以往自于一个表中的列,或更一般地讲,可以往自于肆意表达式。然后字符函数会按照某种体式格局处置输进参数,并返回一个效果。字符函数的一个例子是UPPER(),其成果是将字符串中的一切字母全数转换成年夜写,并返回新的字符串。其余一个例子是NVL(),其成果是将一个空值转换成传递给该函数的值。表1-1列出了一些字符函数。在表1-1战随后的一切语法界说中,x战y皆可以暗示一个表中的列,或更一般地讲,可所以肆意有用的表达式。

表1-1  字 符 函 

函    

说    

ASCII(x)

返回字符x的ASCII码

CHR(x)

返回ASCII码为x的字符

CONCAT(x, y)

将y添加在x上,并将获得的字符串作为效果返回

INITCAP(x)

将x中每个单词的尾字母皆转换成年夜写,并返回获得的字符串

INSTR(x, find_ string

[, start] [, ccurrence])

在x中查找字符串find_string,然后返回find_string地点的位置。可以供应一个可选的start位置往指定该函数从那个位置起头查找。一样,也可以指定一个可选的occurrence参数,往申明应当返回find_string第屡次出现的位置

LENGTH(x)

返回x中字符的个数

LOWER(x)

将x中的字母转换成小写,并返回获得的字符串

LPAD(x, width[, pad_string])

在x的左侧补齐空格,获得总长为width个字符的字符串。该函数可以供应一个可选的pad_string,那个参数用于指定重复使用哪个字符串往补齐x左侧的空位。返回x被补齐以后的效果字符串

LTRIM(x[, trim_string])

从x的左侧截往一些字符。可使用一个可选的参数trim_string往指定要截往的字符;若是没有指定trim_string参数,则默许截往空格

NANVL(x, value)

若是x匹配NAN那个非凡值(非数字),便返回value;不然返回x。(那是Oracle Database 10g新增加的函数)

NVL(x, value)

若是x为空,便返回value;不然返回x

NVL2(x,value1, alue2)

若是x非空,便返回value1;不然返回value2

REPLACE(x,search_string, replace_string)

在x中查找search_string,并将其交流为replace_string

RPAD(x,width[,pad_string])

取LPAD()相同,没有外要对x的右边补齐

RTRIM(x[,trim_string])

取LTRIM()相同,没有外要对x的右边截往

SOUNDEX(x)

返回一个包含x的发音的字符串。该函数用于对英文发音好别但却比拟接近的单词进行比拟

SUBSTR(x, start[, length])

返回x中的一个子字符串,那个子字符串从start处起头,借可以为那个子字符串指定一个可选的length参数

TRIM({[LEADING TRAILING BOTH] trim_string FROM} )

从x的左侧战右边同时截往一些字符。可使用一个可选的参数trim_string往指定要截往的字符;若是没有指定trim_string参数,则默许截往空格;LEADING删除字符串左侧的字符,TRAILING删除字符串右边的字符,
BOTH删除字符串双圆的字符

UPPER(x)

将x中的字母转换为年夜写,并返回获得的字符串

1. ASCII()战CHR()

ASCII(x)函数用于获得字符x的ASCII码,CHR(x)函数用于获得ASCII码为x的字符。

下里那个查询使用ASCII函数获得a、A、0和9的ASCII码:

SELECT  ASCII("a"), ASCII("A"), ASCII("z"), ASCII("Z"), ASCII(0), ASCII(9)

FROM dual;

ASCII("a")  ASCII("A")  ASCII("A")  ASCII("A")  ASCII(0)   ASCII(9)

----------  ----------  ----------  ----------  ---------  ---------

    97          65          122         90          48         57

属意:

在此查询中我们使用了dual表。dual表只包含一行;那个表可以用往施行好池任何特定表进行操作的查询。

下里那个查询使用CHR函数获得ASCII码为97、65、122、90、48及57的字符:

SELECT  CHR(97), CHR(65), CHR(122), CHR(90),CHR(48), CHR(57)

FROM dual;

          C

-- -- --  -- -- --

          9

属意在此查询中,CHR函数返回的字符取前一个例子中传递给ASCII函数的那些参数完备相同。那申明CHR函数战ASCII函数的效果是互逆的。

2. CONCAT()

CONCAT(x, y)函数用于将y添加在x以后,该函数会返回获得的字符串。

下里那个查询使用CONCAT函数将last_name添加在first_name以后:

SELECT  CONCAT(first_name, last_name)

FROM customers;

CONCAT(FIRST_NAME,LAST_NAME)

--------------------

JohnBrown

CynthiaGreen

SteveWhite

GailBlack

DoreenBlue

属意:

CONCAT函数取 || 操作符的成果完备相同。

3. INITCAP()

INITCAP(x)函数用于将x中每个单词的尾字母转换成年夜写。

下里那个查询从products表中挑选product_id战description列,并使用INITCAP函数将description列中的每个单词的尾字母转换成年夜写:

SELECT  product_id, INITCAP(description)

FROM products

WHERE product_id 4;

PRODUCT_ID  INITCAP(DESCRIPTION)

----------  -------------------------------

        Description Of Modern Science

        Introduction To Chemistry

        Star Explodes

4. INSTR()

INSTR(x,find_string[,start][,occurrence])函数用于在x中查找find_string。INSTR()函数返回find_string地点的位置,该函数可使用可选参数start往申明从x中的哪个位置起头查找,借可使用可选参数occurrence申明应当返回find_string第屡次出现的位置。

下里那个查询从products表中挑选product_id为1的行的name列,并闪现字符串Science在个中的位置:

SELECT  name, INSTR(name, "Science")

FROM products

WHERE product_id 1;

NAME             INSTR(NAME,"SCIENCE")

---------------  ---------------------

Modern Science   8

下里那个查询使用INSTR函数闪现了从产品名的开尾起头第两次出现字母e的位置:

SELECT  name, INSTR(name, "e", 1, 2)

FROM  products

WHERE product_id 1;

NAME             INSTR(NAME,"E",1,2)

---------------  -------------------

Modern Science   11

属意在字符串Modern Science中第两个e是第11个字符(空格也算一个字符)。

在字符函数中也可使用日期。下里那个查询使用INSTR函数闪现了第一个顾主的dob中字符串JAN的位置。

SELECT customer_id, dob, INSTR(dob, "JAN")

FROM customers

WHERE customer_id 1;

CUSTOMER_ID   DOB         INSTR(DOB,"JAN")

------------  ----------  ----------------

         01-JAN-65   4

5. LENGTH()

LENGTH(x)函数用于获得x中字符的个数。下里那个查询使用LENGTH函数闪现了products表中name列中字符串的长度:

SELECT name, LENGTH(name)

FROM products;

NAME                  LENGTH(NAME)

---------------       ------------

Modern Science        14

Chemistry             9

Supernova             9

Tank War              8

下里那个查询使用LENGTH函数闪现了组成产品价格(price列)的字符总数;属意小数点(.)也较劲争论在字符总数之内。

SELECT price, LENGTH(price)

FROM products

WHERE product_id 3;

PRICE          LENGTH(PRICE)

---------      ------------------

19.95          5

30          2

6. LOWER()战UPPER()

LOWER(x)函数用于将x中的字母转换成小写。同理,UPPER(x)函数用于将x中的字母转换成年夜写。

下里那个查询从customers表中挑选first_name战last_name列,使用UPPER函数将first_name列转换成年夜写,并使用LOWER函数将last_name列中的字符串转换成小写:

SELECT UPPER(first_name), LOWER(last_name)

FROM customers;

UPPER(FIRST_NAME)   LOWER(LAST_NAME)

------------------  -------------------------

JOHN                brown

CYNTHIA             green

STEVE               white

GAIL                black

7. LPAD()战RPAD()

LPAD(x, width [, pad_string]) 函数用于在x的左侧补齐空格,使x的总长度达到width个字符。若是在pad_sring参数中指定了一个字符串,那么便使用那个字符串往重复加添x左侧的空位,以补齐x的长度。补齐后的字符串作为效果返回。同理,RPAD(x, width [, pad_string]) 函数用于在x的右边补齐字符串。

下里那个例子从products表中挑选name战price列。name列使用RPAD函数进行右补齐,长度达到30个字符,并且使用小数点往补齐空位。price列使用LPAD函数进行左补齐,长度达到8个字符,并且使用 *+ 字符往补齐空位。

SELECT RPAD(name, 30, "."), LPAD(price, 8, "*+")

FROM products

WHERE product_id 4;

RPAD(NAME,30,".")               LPAD(price, 8, "*+")

------------------------------ --------------

Modern Science................  *+*19.95

Chemistry..................... *+*+*+30

Supernova.....................  *+*25.99

属意:

那个例子申明可以对数字行使一些字符函数。具体往说,就是那个例子中的price列包含了数字,而我们使用LPAD函数进行了左补齐。

8. LTRIM()、RTRIM()战TRIM()

LTRIM(x [,trim_string])函数用于从x的左侧截往一些字符,该函数借可使用可选的参数trim_string往指定要截往的字符;若是没有指定trim_string参数,默许状态下会截往空格。同理,RTRIM函数用于从x的右边截往一些字符,TRIM函数用于从x的左侧战右边各截往一些字符。下里那两个查询用到了那3个函数:

SELECT LTRIM(" Hello Gail Seymour!"),RTRIM("Hi Doreen Oakley!abcabc", "abc")

FROM dual;

LTRIM(" Hello Gail Seymour!") RTRIM("Hi Doreen Oakley!abcabc", "abc")

---------------------------   ----------------------------  

Hello Gail Seymour!           Hi Doreen Oakley!     

SELECT TRIM(’0’FROM "0Hey0"),TRIM(LEADING "0" FROM "0Hey0"),TRIM(TRAILING "0" FROM "0Hey0")

FROM dual;

TRIM(’O’   TRIM(TRAILING "0"  TRIM(TRAILING "0"

---------    ---------------    ------------------ 

Hey          Hey0               0Hey   

9. NVL()

NVL函数用于将空值转换成一个已知的值。NVL(x,value)的效果如下:若是x为空,则返回value;不然返回x。

下里那个查询从customers表中挑选customer_id战phone列。若是phone列的值为空,则使用NVL函数将其转换为字符串Unknown Phone Number。

SELECT customer_id, NVL(phone, "Unknown Phone Number")

FROM customers;

CUSTOMER_ID     NVL(phone, "Unknown Phone Number")

------------    ---------------------------------

    800-555-1211

    800-555-1212

    800-555-1213

    800-555-1214

    Unknown Phone Number

顾主#5的phone列被转换为Unknown Phone Number,因为此行的phone列值为空。

10. NVL2()

NVL2(x, value1, value2)的返回效果如下:若是x非空,则返回value1;不然返回value2。

下里那个查询从customers表中挑选customer_id战phone列。若是phone列的值非空,则使用NVL2函数将其转换为字符串Known;若是若是phone列的值为空,则使用NVL2函数将其转换为Unknown:

SELECT customer_id, NVL2(phone, "Known", "Unknown")

FROM customers;

CUSTOMER_ID     NVL2(phone, "Known", "Unknown")

------------    --------------------------------------

    Known

    Known

    Known

    Known

    Unknown

属意顾主#1到#4的phone列的值被转换成了Known,因为那些记实的phone列皆没有为空。而顾主#5的phone列的值则被转换成了Unknown,因为该行的phone列的值为空。

11. REPLACE()

REPLACE(x, search_string, replace_string)用于在x中查找search_string,并将其交流为replace_string。

下里那个例子使用REPLACE函数从products表中查询product_id为1的记实的name列(其name列为Modern Science),并将字符串Science交流为Physics:

SELECT REPLACE(name, "Science", "Physics")

FROM products

WHERE product_id 1;

REPLACE(NAME,"SCIENCE","PHYSICS")

-------------------------------------

Modern Physics

属意:

REPLACE函数其实没有会实正对数据库中的数据进行建改,而是只对效果汇合返回的行进行建改。

12. SOUNDEX()

SOUNDEX(x)用于获得包含x发音的一个字符串,该函数用于对英文拼写好别但发音相同的单词进行比拟。

下里那个查询使用SOUNDEX函数从customers表中挑选last_name发音相同于whyte的行的last_name列:

SELECT last_name

FROM customers

WHERE SOUNDEX(last_name) SOUNDEX("whyte");

LAST_NAME

----------

White

下里那个查询获得发音相同于“bloo”的last_name列:

SELECT last_name

FROM customers

WHERE SOUNDEX(last_name) SOUNDEX("bloo");

LAST_NAME

----------

Blue

13. SUBSTR()

SUBSTR(x, start[, length])用于从x中获得从start位置起头的一个子字符串,借可使用可选参数length指定子字符串的长度。

下里那个查询使用SUBSTR函数挑选products表中name列的一个子字符串:它从name列的第两个字符起头,长度为7个字符:

SELECT SUBSTR(name, 2, 7)

FROM products

WHERE product_id 4;

SUBSTR(name, 2, 7)

------------------------

odern S

hemistr

upernov

14. 在函数中使用表达式

在函数中并非只能使用表中的列:也可以供应肆意有用的表达式,条件是那个表达式的效果是一个字符串。下里那个查询使用SUBSTR函数从字符串Mary had little lamb中挑选子字符串little:

SELECT SUBSTR("Mary had little lamb", 12, 6)

FROM dual;

SUBSTR("Mary had little lamb", 12, 6)

-------------------------------------------

little

15. 函数组合

在一个SQL语句中,可使用函数的肆意有用组合。下里那个查询便使用了一个函数组合,个中包含UPPER函数战SUBSTR函数;属意SUBSTR()函数的输出被作为参数传递给UPPER函数:

SELECT name, UPPER(SUBSTR(name, 2, 8))

FROM products

WHERE product_id 4;

NAME                    UPPER(SUBSTR(name, 2, 8))

----------------        --------------------------

Modern Science          ODERN SC

Chemistry               HEMISTRY

Supernova               UPERNOVA

属意:

那种函数组合的能力没有只限于字符函数。任何有用的函数组合皆可以正常使用。

 


<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22311142/viewspace-1115560/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-08-10