SQL單行函數-字符函數

SQL 單行函數-字符函數

雖然各個數據庫都是支持SQL語句的,但是每個數據庫都有自己的函數,這些就是單行函數。單行函數分爲以下5類:
                  1)字符函數 2)數字函數 3)日期函數 4)轉換函數 5)通用函數

在ORACLE中最麻煩的是:轉換函數和通用函數

1、字符函數

字符函數的功能主要進行字符串數據操作,下面給出幾個字符函數:

UPPER(字符串 | 列):將輸入的字符串變爲大寫返回;

LOWER(字符串 | 列):將輸入的字符串變爲小寫返回;

INITCAP(字符串| 列):將開頭首字母是大寫;

LENGTH(字符串| 列):求出字符串的長度;

REPLACE(字符串| 列):進行替換;

SUBSTR(字符串 |列)開始點或【結束點】:字符串截取;

ORACLE之中有一點比較麻煩,即使要校驗字符串,你就必須編寫完整的SQL語句,所以在ORACLE數據庫之中爲了用戶的查詢方便,提供了一個【dual】的虛擬表。

例子:字符串大寫轉換

SQL> SELECT upper('hello') FROM dual;

UPPER
-----
HELLO

注意:大寫轉換的用處在於,用戶輸入的數據存放的是大寫還是小寫呢?


SQL> SELECT employee_id,first_name,salary,hire_date FROM employees WHERE first_name='&tj';
Enter value for tj: tj
old   1: SELECT employee_id,first_name,salary,hire_date FROM employees WHERE first_name='&tj'
new   1: SELECT employee_id,first_name,salary,hire_date FROM employees WHERE first_name='tj'

no rows selected


此時如果輸入的是小寫,則肯定無法查詢到數據;所以只能加入一個函數:

SQL> SELECT employee_id,first_name,salary,hire_date FROM employees WHERE first_name=UPPER('&tj');
Enter value for tj: tj
old   1: SELECT employee_id,first_name,salary,hire_date FROM employees WHERE first_name=UPPER('&tj')
new   1: SELECT employee_id,first_name,salary,hire_date FROM employees WHERE first_name=UPPER('tj')

EMPLOYEE_ID FIRST_NAME               SALARY HIRE_DATE
----------- -------------------- ---------- ------------------
        132 TJ                         2100 10-APR-99


注意:【&】的符號表示替代變量的內容,此部分內容不做爲重點。

例子:字符串小寫轉換,將所有僱員姓名按照小寫字符來

SQL> SELECT LOWER(first_name) FROM employees;

LOWER(FIRST_NAME)
--------------------
ellen
sundar
mozhe
david
hermann
shelli
amit
elizabeth
sarah
david
laura

LOWER(FIRST_NAME)
--------------------
harrison
alexis
anthony
gerald
nanette
john
kelly
karen
curtis
lex
julia

例子:將每一個僱員姓名的開頭首字母大寫

SQL> SELECT INITCAP(first_name) FROM employees;

INITCAP(FIRST_NAME)
--------------------
Ellen
Sundar
Mozhe
David
Hermann
Shelli
Amit
Elizabeth
Sarah
David
Laura


例子:查詢出每個僱員姓名的長度

SQL> SELECT first_name,LENGTH(first_name) FROM employees;

FIRST_NAME           LENGTH(FIRST_NAME)
-------------------- ------------------
Ellen                                 5
Sundar                                6
Mozhe                                 5
David                                 5
Hermann                               7
Shelli                                6
Amit                                  4
Elizabeth                             9
Sarah                                 5
David                                 5
Laura                                 5

例子:查詢姓名長度正好是5的僱員信息

SQL> SELECT first_name,LENGTH(first_name) FROM employees WHERE LENGTH(first_name)=5;

FIRST_NAME           LENGTH(FIRST_NAME)
-------------------- ------------------
Ellen                                 5
Mozhe                                 5
David                                 5
Sarah                                 5
David                                 5
Laura                                 5
Kelly                                 5
Karen                                 5
Julia                                 5
Bruce                                 5
Kevin                                 5

例子:使用字母"_"替換姓名中所有字母爲“A”



SQL> SELECT REPLACE(first_name,'A','_') FROM employees;

REPLACE(FIRST_NAME,'
--------------------
Ellen
Sundar
Mozhe
David
Hermann
Shelli
_mit
Elizabeth
Sarah
David
Laura

REPLACE(FIRST_NAME,'
--------------------
Harrison
_lexis
_nthony
Gerald
Nanette
John
Kelly
Karen
Curtis
Lex
Julia

字符串的截取有兩種語法:

1)SUBSTR(字符串 | 列,開始點),表示從開始點一值截取到結尾

SQL> SELECT first_name,SUBSTR(first_name,3) FROM employees;

FIRST_NAME           SUBSTR(FIRST_NAME,3)
-------------------- ----------------------
Ellen                len
Sundar               ndar
Mozhe                zhe
David                vid
Hermann              rmann
Shelli               elli
Amit                 it
Elizabeth            izabeth
Sarah                rah
David                vid
Laura                ura
Harrison             rrison
Alexis               exis
Anthony              thony
Gerald               rald
Nanette              nette
John                 hn
Kelly                lly
Karen                ren
Curtis               rtis

2)SUBSTR(字符串 | 列,開始點,結束點),表示從開始點一值截取到結尾點,截取部分內容

SQL> SELECT first_name,SUBSTR(first_name,0,3) FROM employees;

FIRST_NAME           SUBSTR(FIRST_NAME,0,3)
-------------------- ----------------------
Ellen                Ell
Sundar               Sun
Mozhe                Moz
David                Dav
Hermann              Her
Shelli               She
Amit                 Ami
Elizabeth            Eli
Sarah                Sar
David                Dav
Laura                Lau
Harrison             Har
Alexis               Ale
Anthony              Ant
Gerald               Ger
Nanette              Nan
John                 Joh
Kelly                Kel
Karen                Kar
Curtis               Cur

如果我將 SUBSTR(first_name,0,3) 中的“0”改成“1”呢?

SQL> SELECT first_name,SUBSTR(first_name,1,3) FROM employees;

FIRST_NAME           SUBSTR(FIRST_NAME,1,3)
-------------------- ----------------------
Ellen                Ell
Sundar               Sun
Mozhe                Moz
David                Dav
Hermann              Her
Shelli               She
Amit                 Ami
Elizabeth            Eli
Sarah                Sar
David                Dav
Laura                Lau
Harrison             Har
Alexis               Ale
Anthony              Ant
Gerald               Ger
Nanette              Nan
John                 Joh
Kelly                Kel
Karen                Kar
Curtis               Cur

注意:SUBSTR的行數從 “0”或“1”截取是一樣的,ORACLE數據庫在這裏做的很智能。

例子:截取每個僱員姓名的後3個字母,有2種辦法:

1)通過長度-2確定開始點

SQL> SELECT first_name,SUBSTR(first_name,LENGTH(first_name)-2) FROM employees;

FIRST_NAME           SUBSTR(FIRST_NAME,LENGTH(FIRST
-------------------- -------------------------------
Ellen                len
Sundar               dar
Mozhe                zhe
David                vid
Hermann              ann
Shelli               lli
Amit                 mit
Elizabeth            eth
Sarah                rah
David                vid
Laura                ura
Harrison             son
Alexis               xis
Anthony              ony
Gerald               ald
Nanette              tte
John                 ohn
Kelly                lly
Karen                ren
Curtis               tis

2)通過設置負數,從後截取位置

SQL> SELECT first_name,SUBSTR(first_name,-3) FROM employees;

FIRST_NAME           SUBSTR(FIRST_NAME,-3)
-------------------- ---------------------
Ellen                len
Sundar               dar
Mozhe                zhe
David                vid
Hermann              ann
Shelli               lli
Amit                 mit
Elizabeth            eth
Sarah                rah
David                vid
Laura                ura
Harrison             son
Alexis               xis
Anthony              ony
Gerald               ald
Nanette              tte
John                 ohn
Kelly                lly
Karen                ren
Curtis               tis

注意:SUBSTR函數也可以設置負數,表示從後開始向前截取。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章