oracle語句集錦

2022-02-18 09:34:54 字數 3358 閱讀 1205

1、行轉列(pivot函式)

語法:

table_source

pivot(聚合函式(value_column) for pivot_column in(

< column_list > ))

效果圖:

--行轉列

select *

from

saleslist pivot(

max(salesnum)

for shangpin in ( --shangpin 即要轉成列的字段

'上衣'as 上衣, --max(salesnum) 此處必須為聚合函式,

'褲子'as 褲子, --in

() 對要轉成列的每乙個值指定乙個列名

'襪子'as

襪子, '帽子

'as帽子 )

) where

1 = 1;

注意 pivot裡面必須使用聚合函式。

2、列轉行(unpivot函式)

語法:

table_source

unpivot(value_column for pivot_column in(

< column_list > ))

select * from

(select '羅飛

'stu_name,

'2001-2002

'term,

'90'微積分,

'88'線性代數,

'85'資料結構,

'70'作業系統

from dual) unpivot (scorce

for type in(微積分,線性代數,資料結構,作業系統))

結果:

3、使用  listagg() within group ()  將多行合併成一行

select

t .deptno,

listagg (t .ename, ',

') within group (order by t .ename) names

from

scott.emp t

where

t .deptno = '20'

group by

t .deptno

4、字串替換(translate函式)

語法:translate(char, from, to)
用法:返回將出現在from中的每個字元替換為to中的相應字元以後的字串。

若from比to字串長,那麼在from中比to中多出的字元將會被刪除。

三個引數中有乙個是空,返回值也將是空值。

select translate('abcdefga','abc','wo') 返回值 from dual;
返回值:

分析:

該語句要將'

abcdefga

'中的'

abc'轉換為'wo'

, 由於

'abc

'中'a

'對應'

wo'中的'w'

, 故將

'abcdefga

'中的'

a'全部轉換成'w'

; 而

'abc

'中'b

'對應'

wo'中的'o'

, 故將

'abcdefga

'中的'

b'全部轉換成'o'

;

'abc

'中的'

c'在'wo'

中沒有與之對應的字元,

故將'abcdefga

'中的'c'

全部刪除;

簡單說來,就是將from中的字元轉換為to中與之位置對應的字元,

若to中找不到與之對應的字元,返回值中的該字元將會被刪除。

在實際的業務中,可以用來刪除一些異常資料,

比如表a中的乙個欄位t_no表示**號碼,

而**號碼本身應該是乙個由數字組成的字串,

為了刪除那些含有非數字的異常資料,

就用到了translate函式:

sql> delete from a,

where length(translate(trim(a.t_no),

'0123456789' || a.t_no,

'0123456789')) <> length(trim(a.t_no));

補充:replace也有類似的功能

語法:replace(char, search_string,replacement_string)

用法:將char中的字串search_string全部轉換為字串replacement_string。

select replace('

fgsgswsgs

', '

fk' ,'

j') 返回值 from dual;

') 返回值 from dual;

分析

分析:第乙個例子中由於'

fgsgswsgs

'中沒有與'fk'

匹配的字串,

故返回值仍然是

'fgsgswsgs';

第二個例子中將

'fgsgswsgs

'中的字串'

sg'全部轉換為'

eeerrrttt'。

總結:綜上所述,replace與translate都是替代函式,

只不過replace針對的是字串(完全匹配替換),而translate針對的是單個字元(位置匹配替換)。

5、獲取指定時間時當年的第幾季度

select to_char(to_date('2019-06-01','yyyy-mm-dd'),'q') from dual
結果:

SQL語句集錦

use tablename 要操作的資料庫名 select logicalfilename tablename log 日誌檔名 maxminutes 10,limit on time allowed to wrap log.newsize 1 你想設定的日誌檔案的大小 m setup initia...

mysql 語句 集錦 mysql常用語句集錦

mysql unix時間戳與日期的相互轉換 unix時間戳轉換為日期用函式 from unixtime select from unixtime 1156219870 日期轉換為unix時間戳用函式 unix timestamp select unix timestamp 2006 11 04 12...

Oracle面試集錦

oracle 面試題集錦 技術篇 1.解釋冷備份和熱備份的不同點以及各自的優點 解答 熱備份針對歸檔模式的資料庫,在資料庫仍舊處於工作狀態時進行備份。而冷備份指在資料庫關閉後,進行備份,適用於所有模式的資料庫。熱備份的優點在於當備份時,資料庫仍舊可以被使用並且可以將資料庫恢復到任意乙個時間點。冷備份...