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

sql中的decode

發布時間: 2022-12-17 21:43:42

㈠ 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;

㈡ sql語句中,decode和case when語句的區別有哪些

case when 寫起來更長但是更靈活,比如可以case when 列1>列2 ,而decode要實現這個功能要借用SIGN函數,因為DECODE只能判斷具體值不能判斷條件格式,decode(sign(列1-列2),1,『』)效果等同如上,其他的基本等同。
還有decode有一個靈活的應用就是order by , order by decode(列1,字元,1,字元2,2)可以進行靈活的排序。

㈢ 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..語句

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

解決思想:1.把輸入參數按照逗號分割
2.實現decode功能

1.字元串分割函數
create function dbo.getstrofindex (@str varchar(1000),@index int =0)
returns varchar(1000)
as
begin
declare @str_return varchar(1000)
declare @start int
declare @next int
declare @location int
select @start =1
select @next =1
select @location = charindex(',',@str,@start)
while (@location <>0 and @index > @next )
begin
select @start = @location +1
select @location = charindex(',',@str,@start)
select @next [email==@next]=@next[/email] +1
end
if @location =0 select @location =len(@str)+1
select @str_return = substring(@str,@start,@location-@start)
if (@index <> @next ) select @str_return = ''
return @str_return
end

2.自定義decode函數
create function dbo.decode(@col_name varchar(100),@val varchar(1000))
returns varchar(1000)
as
begin
declare @Ind int
declare @i int
declare @Res varchar(1000)
set @Ind=0
set @i=1
set @Res=''
set @Ind=len(@val)-len(replace(@val,',',''))+1
Tab_loop:
if @i<@Ind
begin
if dbo.getstrofindex(@val,@i)=@col_name
begin
set @Res=dbo.getstrofindex(@val,@i+1)
end
else
begin
set @i=@i+2
goto Tab_loop
end
end
else
begin
if @Res=''
begin
set @Res=dbo.getstrofindex(@val,@Ind)
end
end
return @Res
end

3.測試
表名cs1
no xb xm
1 男 張三
2 男 李四
3 女 張三
4 NULL 李四

select *,dbo.decode(no,'1,a,2,b,c') from cs1 -------no欄位,為1顯示a,為2顯示b,否則顯示c

no xb xm val
1 男 張三 a
2 男 李四 b
3 女 張三 c
4 NULL 李四 c

select *,dbo.decode(xb,'男,M,女,W,N') as val from cs1 -------------xb欄位,為男顯示M,為女顯示W,否則顯示N

no xb xm val
1 男 張三 M
2 男 李四 M
3 女 張三 W
4 NULL 李四 N

㈤ 請教sql decode函數的一個簡單用法

首先decode函數是Oracle獨有的判斷函數!

//其實就是一個簡單的判斷函數,比如欄位的值為a
decode(欄位,'a','輸出是a','是a','輸出是b','否則輸出都不是');

//下面我拿EMP表的SCOTT來示例代碼:
SELECT
DECODE(ename,'是SCOTT','Yes','不是SCOTT','No','都不是')
FROMemp
WHEREename=UPPER('scott');

㈥ sql語句 encode和decode的作用與區別。 求大佬解答_(:з」∠)_

ENCODE(str,pass_str)
使用pass_str作為口令加密str。為了解密結果,使用DECODE()。結果是一個二進制字元串,如果你想要在列中保存它,使用一個BLOB列類型。

DECODE(crypt_str,pass_str)
使用pass_str作為口令解密加密的字元串crypt_str。crypt_str應該是一個由ENCODE()返回的字元串。
祝好運,望採納

㈦ decode的表達式能否為SQL語句

可以的。只是只能出現在select之後。
例:SQL> select decode('1','1','select * fro emp') from al;
DECODE('1','1','SELECT*FROEMP'
------------------------------
select * fro emp

如果控制判斷不需要decode,改用nvl就可以了。
例如:SQL> select nvl('','Select * from emp') from al;
NVL('','SELECT*FROMEMP')
------------------------
Select * from emp

㈧ 請問SQL中decode函數的用法

DECODE函數是ORACLE PL/SQL是功能強大的函數之一,目前還只有ORACLE公司的SQL提供了此函數,其他資料庫廠商的SQL實現還沒有此功能。DECODE有什麼用途呢? 先構造一個例子,假設我們想給智星職員加工資,其標準是:工資在8000元以下的將加20%;工資在8000元以上的加15%,通常的做法是,先選出記錄中的工資欄位值? select salary into var-salary from employee,然後對變數var-salary用if-then-else或choose case之類的流控制語句進行判斷。 如果用DECODE函數,那麼我們就可以把這些流控制語句省略,通過SQL語句就可以直接完成。如下:select decode(sign(salary - 8000),1,salary*1.15,-1,salary*1.2,salary from employee 是不是很簡潔? DECODE的語法:DECODE(value,if1,then1,if2,then2,if3,then3,...,else),表示如果value等於if1時,DECODE函數的結果返回then1,...,如果不等於任何一個if值,則返回else。初看一下,DECODE 只能做等於測試,但剛才也看到了,我們通過一些函數或計算替代value,是可以使DECODE函數具備大於、小於或等於功能。

decode()函數使用技巧

·軟體環境:

1、Windows NT4.0+ORACLE 8.0.4

2、ORACLE安裝路徑為:C:\ORANT

·含義解釋:

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

· 使用方法:

1、比較大小

select decode(sign(變數1-變數2),-1,變數1,變數2) from al; --取較小值

sign()函數根據某個值是0、正數還是負數,分別返回0、1、-1

例如:

變數1=10,變數2=20

則sign(變數1-變數2)返回-1,decode解碼結果為「變數1」,達到了取較小值的目的。

2、表、視圖結構轉化

現有一個商品銷售表sale,表結構為:

month char(6) --月份

sell number(10,2) --月銷售金額

現有數據為:

200001 1000

200002 1100

200003 1200

200004 1300

200005 1400

200006 1500

200007 1600

200101 1100

200202 1200

200301 1300

想要轉化為以下結構的數據:

year char(4) --年份

month1 number(10,2) --1月銷售金額

month2 number(10,2) --2月銷售金額

month3 number(10,2) --3月銷售金額

month4 number(10,2) --4月銷售金額

month5 number(10,2) --5月銷售金額

month6 number(10,2) --6月銷售金額

month7 number(10,2) --7月銷售金額

month8 number(10,2) --8月銷售金額

month9 number(10,2) --9月銷售金額

month10 number(10,2) --10月銷售金額

month11 number(10,2) --11月銷售金額

month12 number(10,2) --12月銷售金額

結構轉化的SQL語句為:

create or replace view

v_sale(year,month1,month2,month3,month4,month5,month6,month7,month8,month9,month10,month11,month12)

as

select

substrb(month,1,4),

sum(decode(substrb(month,5,2),'01',sell,0)),

sum(decode(substrb(month,5,2),'02',sell,0)),

sum(decode(substrb(month,5,2),'03',sell,0)),

sum(decode(substrb(month,5,2),'04',sell,0)),

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

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

㈩ sql語句中decode函數怎麼加條件

DECODE 是 判斷 等於/不等於的情況。
判斷小於的, 用 CASE WHEN

例如:
CASE
WHEN 數學成績 < 60 THEN '不及格'
ELSE '及格'
END