当前位置:首页 » 编程语言 » 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