當前位置:首頁 » 編程語言 » oracle中的函數用sql實現
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

oracle中的函數用sql實現

發布時間: 2023-08-10 12:11:13

㈠ Oracle中如何用sql把字元串轉換成整型

您可以使用cast函數將數字字元串轉化為整型。

cast函數格式如下:

CAST(欄位名 as int);

拓展資料

結構化查詢語言(Structured Query Language)簡稱SQL(發音:/ˈes kjuː ˈel/ "S-Q-L"),是一種特殊目的的編程語言,是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系資料庫系統;同時也是資料庫腳本文件的擴展名。

結構化查詢語言是高級的非過程化編程語言,允許用戶在高層數據結構上工作。它不要求用戶指定對數據的存放方法,也不需要用戶了解具體的數據存放方式,所以具有完全不同底層結構的不同資料庫系統, 可以使用相同的結構化查詢語言作為數據輸入與管理的介面。結構化查詢語言語句可以嵌套,這使它具有極大的靈活性和強大的功能。

1986年10月,美國國家標准協會對SQL進行規范後,以此作為關系式資料庫管理系統的標准語言(ANSI X3. 135-1986),1987年得到國際標准組織的支持下成為國際標准。不過各種通行的資料庫系統在其實踐過程中都對SQL規范作了某些編改和擴充。所以,實際上不同資料庫系統之間的SQL不能完全相互通用。

㈡ SQL的基本函數

【二】SQL的基本函數

2.1 關系型資料庫SQL命令類別

數據操縱語言:DML: select; insert; delete; update; merge.

數據定義語言:DDL: create; alter; drop; truncate; rename; comment.

事務控制語言:TCL: commit; rollback; savepoint.

數據控制語言:DCL: grant; revoke.

2.2 單行函數與多行函數

單行函數:指一行數據輸入,返回一個值得函數。所以查詢一個表時,對選擇的每一行數據都會返回一個結果。

SQL>select empno,lower(ename) from emp;

多行函數:指多行數據輸入,返回一個值得函數。所以對表的群組進行操作,並且每組返回一個結果。(典型的是聚合函數)

SQL>select sum(sal) from emp;

2.3 單行函數的幾種類型

2.3.1 字元型函數

lower('SQL Course')----->sql course 返回小寫

upper('sql course')----->SQL COURSE 返回大學

initcap('SQL course')-----> Sql Course 每個單字返回首字母大寫

concat('good','string')---->good string 拼接 只能拼接2個字元串

substr('String',1,3)---->Str 從第1位開始截取3位數,

演變:只有兩個參數的

substr('String',3) 正數第三位起始,得到後面所有字元

substr('String',-2) 倒數第二位,起始,得到最後所有字元

instr('t#i#m#r#a#n#','#') --->找第一個#字元在那個絕對位置,得到的數值

Instr參數經常作為substr的第二個參數值

演變:Instr參數可有四個之多

如select instr('aunfukk','u',-1,1) from al; 倒數第一個u是哪個位置,結果返回5

length('String')---->6 長度,得到的是數值

length參數又經常作為substr的第三個參數

lpad('first',10,'#39;)左填充

rpad(676768,10,'*')右填充

replace('JACK and JUE','J','BL')---->BLACK and BLUE

trim('m' from 'mmtimranm')---->timran 兩頭截,這里的『m』是截取集,僅能有一個字元

trim( ' timran ')---->timran 作用是兩頭去空字元

處理字元串時,利用字元型函數的嵌套組合是非常有效的:

create table customers(cust_name varchar2(20));

insert into customers values('Lex De Hann');

insert into customers values('Renske Ladwig');

insert into customers values('Jose Manuel Urman');

insert into customers values('Joson Malin');

select * from customers;

CUST_NAME

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

Lex De Hann

Renske Ladwig

Jose Manuel Urman

Joson Malin

一共四條記錄,客戶有兩個名的,也有三個名的,現在想列出僅有三個名的客戶,且第一個名字用*號略去

答案之一:

SELECT LPAD(SUBSTR(cust_name,INSTR(cust_name,' ')),LENGTH(cust_name),'*') "CUST NAME"

FROM customers

WHERE INSTR(cust_name,' ',1,2)>0;

CUST NAME

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

*** De Hann

**** Manuel Urman

分析:

先用INSTR(cust_name,' ')找出第一個空格的位置,

然後,SUBSTR(cust_name,INSTR(cust_name,' '))從第一個空格開始往後截取字元串到末尾,結果是第一個空格以後所有的字元,

最後,LPAD(SUBSTR(cust_name,INSTR(cust_name,' ')),LENGTH(cust_name),'*')用LPAD左填充到cust_name原來的長度,不足的部分用*填充,也就是將第一個空格前的位置,用*填充。

where後過濾是否有三個名字,INSTR(cust_name, ' ',1,2)從第一個位置,從左往右,查找第二次出現的空格,如果返回非0值,則說明有第二個空格,則有第三個名字。

2.3.2 數值型函數

round 對指定的值做四捨五入,round(p,s) s為正數時,表示小數點後要保留的位數,s也可以為負數,但意義不大。

round:按指定精度對十進制數四捨五入,如:round(45.923, 1),結果,45.9

round(45.923, 0),結果,46

round(45.923, -1),結果,50

trunc 對指定的值取整 trunc(p,s)

trunc:按指定精度截斷十進制數,如:trunc(45.923, 1),結果,45.9

trunc(45.923),結果,45

trunc(45.923, -1),結果, 40

mod 返回除法後的余數

SQL> select mod(100,12) from al;

2.3.3 日期型函數

因為日期在oracle里是以數字形式存儲的,所以可對它進行加減運算,計算是以天為單位。

預設格式:DD-MON-RR.

可以表示日期范圍:(公元前)4712 至(公元)9999

時間格式

SQL> select to_date('2003-11-04 00:00:00' ,'YYYY-MM-DD HH24:MI:SS') FROM al;

SQL> select sysdate+2 from al; 當前時間+2day

SQL> select sysdate+2/24 from al; 當前時間+2hour

SQL> select sysdate+2/1440 from al; 當前時間+2分鍾

SQL> select (sysdate-hiredate)/7 week from emp; 兩個date類型差,結果是以天為整數位的實數。

①MONTHS_BETWEEN 計算兩個日期之間的月數

SQL>select months_between('1994-04-01','1992-04-01') mm from al;

查找emp表中參加工作時間>30年的員工

SQL>select * from emp where months_between(sysdate,hiredate)/12>32;

很容易認為單行函數返回的數據類型與函數類型一致,對於數值函數類型而言的確如此,但字元和日期函數可以返回任何數據類型的值。比如instr函數是字元型的,months_between函數是日期型的,但它們返回的都是數值。

②ADD_MONTHS 給日期增加月份

SQL>select hiredate,add_months(hiredate,4) from emp;

③LAST_DAY 日期當前月份的最後一天

SQL>select hiredate,last_day(hiredate) from emp;

④NEXT_DAY NEXT_DAY的第2個參數可以是數字1-7,分別表示周日--周六(考點)

比如要取下一個星期六,則應該是:

SQL>select next_day(sysdate,7) FROM DUAL;

⑤ROUND(p,s),TRUNC(p,s)在日期中的應用,如何舍入要看具體情況,s是MONTH按30天計,應該是15舍16入,s是YEAR則按6舍7入計算。

SQL>SELECT empno, hiredate,round(hiredate,'MONTH') AS round,trunc(hiredate,'MONTH') AS trunc FROM emp;

SQL>SELECT empno, hiredate, round(hiredate,'YEAR') AS round,trunc(hiredate,'YEAR') AS trunc FROM emp;

2.3.4 幾個有用的函數和表達式

1)DECODE函數和CASE表達式:

實現sql語句中的條件判斷語句,具有類似高級語言中的if-then語句的功能。

decode函數源自oracle, case表達式源自sql標准,實現功能類似,decode語法更簡單些。

decode函數用法:

SQL> SELECT job, sal,

decode(job, 'ANALYST', SAL*1.1, 'CLERK', SAL*1.15,'MANAGER', SAL*1.20, SAL) SALARY FROM emp

decode函數的另幾種常見用法:

SQL>select ename,job,decode(job,'MANAGER','中層幹部') leader from emp;

SQL> select ename,job,comm,decode (comm,null,'nonsale','sale') saleman from emp;

註:單一列處理,共四個參數:含義是:comm 如果為null就取'nonsale,否則取'sale'

SQL> select sal,sign(sal-1500) from emp;

SQL> select ename,decode (sign(sal-1500), 1, 'NORMAL','LOW') as "LEV" from emp;

註:sign()函數根據某個值是0、正數還是負數,分別返回0、1、-1,含義是:工資大於1500,返回1,真取'NORMAL',假取'LOW'

CASE表達式第一種用法:

SQL> SELECT job, sal,

case job when 'ANALYST' then SAL*1.10

when 'CLERK' then SAL*1.15

when 'MANAGER' then SAL*1.20

else sal end SALARY

FROM emp

CASE表達式第二種用法:

SQL> SELECT job, sal, case

when job='ANALYST' then SAL*1.1

when job='CLERK' then SAL*1.15

when job='MANAGER' then SAL*1.20

else sal end SALARY

FROM emp

以上三種寫法結果都是一樣的

CASE第二種語法比第一種語法增加了搜索功能。形式上第一種when後跟定值,而第二種還可以使用表達式和比較符。

看一個例子

SQL> SELECT ename,sal,case

when sal>=3000 then '高級'

when sal>=2000 then '中級'

else '低級' end 級別

FROM emp

再看一個例子:使用了復雜的表達式

SQL> SELECT AVG(CASE

WHEN sal BETWEEN 500 AND 1000 AND JOB='CLERK'

THEN sal ELSE null END) "CLERK_SAL"

from emp;

比較;

SQL> select avg(sal) from emp where job='CLERK';

2)DISTINCT(去重)限定詞的用法:

distinct貌似多行函數,嚴格來說它不是函數而是select子句中的一個選項。

SQL> select distinct job from emp; 消除錶行重復值。

SQL> select distinct job,deptno from emp; 重復值是後面的欄位組合起來考慮的

SQL> select distinct * from emp; 消除重復記錄

3)sys_context 獲取環境上下文的函數(多用於應用環境)

scott遠程登錄

SQL>select SYS_CONTEXT('USERENV','IP_ADDRESS') from al;

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

192.168.0.136

SQL> select sys_context('userenv','sid') from al;

SYS_CONTEXT('USERENV','SID')

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

129

SQL> select sys_context('userenv','terminal') from al;

SYS_CONTEXT('USERENV','TERMINAL')

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

TIMRAN-222C75E5

the end !!!

@jackman 共築美好!

㈢ oracle里的哪個函數等於sql的year函數急

sql中的year函數即取日期類型年份,在oracle中可用to_char函數。

sql中取當前時間的年份:

selectyear(getdate())

結果:

㈣ oracle sql語句中,有沒有能夠將結果集中數字替換成漢字的函數

oracle sql語句中,有沒有能夠將結果集中數字替換成漢字的函數?

oracle sql語句中,有能夠將結果集中數字替換成漢字的函數,用decode()函數。

1,SQL是Oracle資料庫對SQL語句的擴展。它是一種程序語言,叫做過程化SQL語言。

2,在普通SQL語句的使用上增加了編程語言的特點,所以PL/SQL就是把數據操虛褲仔作和查詢語句組織在PL/SQL代碼的過程性單元中,通過邏輯判斷、循環等操作實現復雜的功能或者計算的程序語言。

3,通過多條SQL語句實現功能時,每條語句都需要在客戶端和服務端傳遞,而且每條語句的執行結果也需要在網路中進行交互,佔用了大量的網路帶寬,消耗了大量網路傳遞的時間。在網路中傳輸的那些結果,往往都是中間結果,而不是我們所關心的。

4,在整個過程中網路里只傳輸了很少的數據,減少了網路傳輸佔用的時間,所以整體程序的執行性能會有明顯的提高。

5,PL/SQL的使用,使SQL成為一種高級程序設計語言,支持高級語言的塊操作,條件判斷,循環語句,嵌套等,與資料庫核心的數據類型集成,使SQL 的程序設計效率更高.

word 中的查找替換將數字換成漢字

先用CTRL+A把WORD全文選中,然後按「CTRL+F」打開「查找和替換」,選「替換」,然後在「查找內容」中輸入你想要替換掉的數字,然後在「替換為」中輸入你想換成的漢字,如果只替換一處,直接點下邊的「替換差汪」就可以了,如果想把文檔中所有符合條件的都替換就點「全部替換」即可。

Mysql中查詢一個表,把結果中的7替換成文字,請寫出sql語句

7是一個欄位嗎?還是一個值?值的話就case when吧 case when a=7 then '文字' else a

在sql查詢中null怎麼替換成漢字

假設欄位名為 column
case when column is null then '空' else column end
還有更方便的
isnull(column,'空')

Mysql中查詢一個表,把結果中的NULL替換成0,怎麼寫出sql語句?

1、MSSQL: ISNULL()

語法純扒

ISNULL ( check_expression , replacement_value )

參數

check_expression

將被檢查是否為 NULL的表達式。check_expression 可以是任何類型的。

replacement_value

在 check_expression 為 NULL時將返回的表達式。replacement_value 必須與 check_expresssion 具有相同的類型。

返回類型

返回與 check_expression 相同的類型。

注釋

如果 check_expression 不為 NULL,那麼返回該表達式的值;否則返回 replacement_value。

2、Oracle: NVL()

語法

NVL(eExpression1, eExpression2)

參數

eExpression1, eExpression2

如果 eExpression1 的計算結果為 null 值,則 NVL() 返回 eExpression2。如果 eExpression1 的計算結果不是 null 值,則返回 eExpression1。eExpression1 和 eExpression2 可以是任意一種數據類型。如果 eExpression1 與 eExpression2 的結果皆為 null 值,則 NVL( ) 返回 NULL

WPS中如何將所有漢字替換成漢儀中宋簡

首先,你的電腦系統中需要安裝漢儀中宋簡字體。
如果沒有,可網路一下,下載安裝。WIN7系統在下載的.ttf文件上點鍵——安裝即可安裝到系統中。
在WPS中,全選(按Ctrl+A),在「字體」中選擇該字體。

oracle 中的instr替換成sqlserver的什麼函數

Oracle:INSTR(<C1>,<C2>[,I][,J])
SQL Server:CHARINDEX(<C1>,<C2>[,I])
說明:在C2中從I開始搜索C1第1次出現的位置。I:默認1

java中數組的替換當中,如何使用fill()將數字替換成符號

當數據元素為對象時,數據的元素先要初始化,才能使用.因此,代碼
a[]=new [10];
a[0].set(100);
System.out.println(a[0].num);
需要改成;
a[]=new [10];
a[0]=new ();
a[0].set(100);
System.out.println(a[0].num);

sqlite 用sql語句將結果集中的一列數據拼接成一個字元串

這個只用一個查詢語句我是沒有方法可以解決。
我的解決方法需要用到存儲過程,可以直接使用下面代碼,或者將其裝入存儲過程。
Declare @s varchar(200)--長度需要根據需要設定
Set @s = ''
Select @s = @s + Name from 【表】--你的表
Where 【條件】
Select @s

㈤ oracle sql中count、case函數運用

count
表示的是計數,也就是說記錄的條數,通常和分組函數一起使用。
sql:select
userId
,
count(*)
from
tablename
group
by
userId。
case表示的是多條件判斷。
sql:select
ename,
case
when
sal<1000
then
'lower'
when
sal>1001
and
sal<2000
then
'modest'
when
sal>2001
and
sal<4000
then
'high'
else
'too
high'
end
from
emp;
以上語句就是一個簡單的判斷工資等級的一個case用法。

㈥ Oracle資料庫操作時如何使用LOWER()、UPPER()函數

1、lower():大寫字元轉化成小寫的函數

使用舉例:select lower(表中欄位) from 表名

該sql實現將表裡的欄位信息中含有字母的全部轉成小寫。

2、upper():小寫字元轉化成大寫的函數

使用舉例:select upper(表中欄位) from 表名

該sql實現將 user表裡的欄位信息中含有字母的全部轉成大寫。

(6)oracle中的函數用sql實現擴展閱讀

oracle常用函數介紹:

1、CONCAT(X,Y):連接字元串X和Y;

2、LENGTH(X):返回X的長度;

3、REPLACE(X,old,new):在X中查找old,並替換成new;

4、SUBSTR(X,start[,length]):返回X的字串,從start處開始,截取length個字元,預設length,默認到結尾;

5、TRUNC(X[,Y]):X在第Y位截斷;

6、COUNT():數據統計;

7、MIN()、MAX():最小值、最大值。



㈦ oracle中如何創建函數,本人用的是pl/sql,初學者,最好能給出例子和詳細講解

下面是一個函數的簡單示例!建議閱讀相關書籍以便充分理解!畢竟很多細節是很難一一描繪的.系統看看書會比較好!
函數是有名稱的pl/sql塊
函數有返回值
在表達式中調用函數
存儲在伺服器端
CREATE OR REPLACE FUNCTION get_sal
(v_id IN emp.empno%TYPE) RETURN NUMBER
IS
v_salary emp.sal%TYPE :=0;
BEGIN
SELECT sal INTO v_salary FROM emp WHERE empno = v_id;
RETURN (v_salary);
END get_sal;
/
驗證對象
select object_name,object_type from user_objects;
查看原程序
select text from user_source;
調用函數
select get_sal(7839) from al;
刪除函數
DROP FUNCTION get_salary;

㈧ 如何在sqlserver中實現oracle decode的功能,並寫成一個函數

create
function
uf_decode(@argu
varchar(999))
returns
integer
as
begin
--對@argu進行分解
--使用動態SQL組織CASE語法結構
end
引用uf_decode時把參數以一個字元串的形式傳入﹐
你再試試﹐如果不行﹐晚上我幫你寫。