❶ sql語句 encode和decode的作用與區別。 求大佬解答_(:з」∠)_
ENCODE(str,pass_str)
使用pass_str作為口令加密str。為了解密結果,使用DECODE()。結果是一個二進制字元串,如果你想要在列中保存它,使用一個BLOB列類型。
DECODE(crypt_str,pass_str)
使用pass_str作為口令解密加密的字元串crypt_str。crypt_str應該是一個由ENCODE()返回的字元串。
祝好運,望採納
❷ 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 共築美好!
❸ PLSQL Developer 中decode()函數的基本用法
decode(a,b,c,d,e,.....)
如果a=b,則輸出c,a=d,則輸出e,否則....
e.g select decode('a','a','1','b','2','3') from al
'a'='a' 輸出1
select decode('b','a','1','b','2','3') from al
'b'!='a' 『b'='b' 輸出2
select decode('c','a','1','b','2','3') from al
'c'!='a' 'c' !='b' 輸出3
就是相當於變形了的if..else..語句
❹ SQL中的decode及case when的用法
在寫 sql的時候我們會經常使用到decode函數,今天我們來講一些decode的基本用法吧。
表達式:decode(列名,值1,值11,值2,雀隱值22,值3,值33......,值X)
表達式的意思:
文字描述: 如果列名對應的值等於值1,那麼他的值就等於值11,如果列名對應的值是值2那麼他的值就是值22,如果列名對應的值是值3那麼他的值就是值33等等,條件都不滿足,列名的值就是值X 。
用java的語法來表達就是:
其實在sql中還有一種方法表達的來表達if else的判斷春歲棗語句,那就是 case when語句,但是case when 有兩種表方式.
用case when 來表達上面的語句:
表達方式一:
表達方式二:
最後提一點一定要 注意 的是:
如扒拆果不一樣那就會報錯
ps:如果對你們有幫助請點擊下面的喜歡,謝謝
❺ pl/sql中存儲過程怎麼寫decode(a_id, '12', '風, '28', '區') 編譯報錯,decode 功能怎麼實現
decode(a_id, '12', '風', '28', '區'),風字後面少了一個單引號。
最科學的辦法,還要加一個default值
decode(a_id, '12', '風', '28', '區','找不到對應')
decode的用法:
DECODE函數相當於一條件語句(IF).它將輸入數值與函數中的參數列表相比較,根據輸入值返回一個對應值。函數的參數列表是由若干數值及其對應結果值組成的若干序偶形式。當然,如果未能與任何一個實參序偶匹配成功,則函數也有默認的返回值。區別於SQL的其它函數,DECODE函數還能識別和操作空值.
其具體的語法格式如下:
DECODE(input_value,value,result[,value,result…][,default_result]);
其中:
input_value 試圖處理的數值。DECODE函數將該數值與一系列的序偶相比較,以決定最後的返回結果
value 是一組成序偶的數值。如果輸入數值與之匹配成功,則相應的結果將被返回。對應一個空的返回值,可以使用關鍵字NULL於之對應
result 是一組成序偶的結果值
default_result 未能與任何一序偶匹配成功時,函數返回的默認值
下面的例子說明了,如何讀取用戶CHECKUP表SEAPARK中的BLOOD_TEST_FLAG列下的項目,作為DECODE函數的實參支持值。
SELECT checkup_type,
DECODE(blood_test_flag,』Y』,』Yes』,』N』,』No』,NULL,』None』,』Invalid』)
FROM checkup;
❻ 資料庫系列——decode用法
DECODE()使用方法:
decode(條件,值1,翻譯值1,值2,翻譯值2,...值舉謹枝n,翻譯晌兄值n,預設值)
等價於if else
可以用在排序中
例子1:按部門dept_name排序(A->B->C)排序,對每個部門正敏內部按照dept升序?
select * from t2 order by decode(dept_name,'deptA',1,'deptB',2,'deptC',3),region_id;
參考這個文章:
https://blog.csdn.net/qq_24063701/article/details/78155052
❼ SQL中 decode()函數簡介
DECODE函數,是ORACLE公司的SQL軟體ORACLE
PL/SQL所提供的特有函數計算方式,以其簡潔的運算方式,可控的數據模型和靈活的格式轉換而聞名。
今天看別人的SQL時看這裡面還有decode()函數,以前從來沒接觸到,上網查了一下,還挺好用的一個函數,寫下來希望對朋友們有幫助哈!
decode()函數簡介:
主要作用:將查詢結果翻譯成其他值(即以其他形式表現出來,以下舉例說明);
使用方法:
Select
decode(columnname,值1,翻譯值1,值2,翻譯值2,...值n,翻譯值n,預設值)
From
talbename
Where
…
其中columnname為要選擇的table中所定義的column,
·含義解釋:
decode(條件,值1,翻譯值1,值2,翻譯值2,...值n,翻譯值n,預設值)的理解如下:
if
(條件==值1)
then
return(翻譯值1)
elsif
(條件==值2)
then
return(翻譯值2)
......
elsif
(條件==值n)
then
return(翻譯值n)
else
return(預設值)
end
if
註:其中預設值可以是你要選擇的column
name
本身,也可以是你想定義的其他值,比如Other等;
舉例說明:
現定義一table名為output,其中定義兩個column分別為monthid(var型)和sale(number型),若sale值=1000時翻譯為D,=2000時翻譯為C,=3000時翻譯為B,=4000時翻譯為A,如是其他值則翻譯為Other;
SQL如下:
Select
monthid
,
decode
(sale,1000,'D',2000,'C',3000,'B',4000,'A','Other')
sale
from
output
特殊情況:
若只與一個值進行比較
Select
monthid
,decode(sale,
NULL,『---',sale)
sale
from
output
另:decode中可使用其他函數,如nvl函數或sign()函數等;
NVL(EXPR1,EXPR2)
若EXPR1是NULL,則返回EXPR2,否則返回EXPR1.
SELECT
NAME,NVL(TO_CHAR(COMM),'NOT
APPLICATION')
FROM
TABLE1;
如果用到decode函數中就是
select
monthid,decode(nvl(sale,6000),6000,'NG','OK')
from
output
sign()函數根據某個值是0、正數還是負數,分別返回0、1、-1,
如果取較小值就是
select
monthid,decode(sign(sale-6000),-1,sale,6000)
from
output,即達到取較小值的目的。
小結:
作用:將輸入數值與函數中的參數列表相比較,根據輸入值返回一個對應值。函數的參數列表是由若干數值及其對應結果值組成的若干序偶形式。當然,假如未能與任何一個實參序偶匹配成功,則函數也有默認的返回值。
區別於SQL的其它函數,DECODE函數還能識別和操作空值。
語法:DECODE(control_value,value1,result1[,value2,result2…][,default_result]);
control
_value試圖處理的數值。DECODE函數將該數值與後面的一系列的偶序相比較,以決定返回值。
value1是一組成序偶的數值。假如輸入數值與之匹配成功,則相應的結果將被返回。對應一個空的返回值,可以使用要害字NULL於之對應
result1
是一組成序偶的結果值。
default_result
未能與任何一個值匹配時,函數返回的默認值。