第五十一章 SQL函数 DECODE
第五十一章 SQL函数 DECODE
计算给定表达式并返回指定值的函数。
大纲
DECODE(expr {,search,result}[,default])
参数
expr
- 要解码的表达式。search
- 要与Expr进行比较的值。result
-Expr
匹配搜索时返回的值。default
- 可选-如果expr
与任何搜索都不匹配,则返回默认值。
描述
可以指定多个搜索和结果对,以逗号分隔。您可以指定一个默认值。DECODE
表达式(包括EXPR
、SEARCH
、RESULT
和DEFAULT
)中的最大参数数约为100
。搜索、结果和默认值可以从表达式派生。
为了计算DECODE
表达式,会逐个将expr
与每个搜索值进行比较:
- 如果
expr
等于search
,则返回相应的结果。 - 如果
expr
不等于search
,则返回默认值,如果省略默认值,则返回NULL
。
仅在将search
与Expr
进行比较之前计算每个search
,而不是在将所有search
与Expr
进行比较之前评估所有search
。因此,如果上一次搜索等于EXPR
,不会对搜索求值。
在DECODE
表达式中,将两个NULL
视为等效。如果expr
为NULL
,则将返回同样为NULL
的第一次搜索结果。
请注意,为了与Oracle兼容,支持解码。
返回值的数据类型
DECODE
返回第一个结果参数的数据类型。如果无法确定第一个结果参数的数据类型,则DECODE
返回VARCHAR
。对于数值,DECODE
从所有可能的结果参数值返回最大长度、精度和小数位数。
如果结果和默认值的数据类型不同,则返回的数据类型是与所有可能的返回值最兼容的类型,即具有最高数据类型优先级的数据类型。例如,如果结果是整数,默认值是小数,则DECODE
返回一个带有数据类型数字的值。这是因为数字是与两者兼容的最高优先级的数据类型。
示例
下面的例子将13
到19
岁的年龄“decodes”
为“Teen”
;
默认为“Adult”
:
SELECT Name,Age,DECODE(Age,
13,'Teen',14,'Teen',15,'Teen',16,'Teen',
17,'Teen',18,'Teen',19,'Teen',
'Adult') AS AgeBracket
FROM Sample.Person
WHERE Age > 12
下面的示例对空值进行解码。
如果FavoriteColors
没有值,DECODE
将它替换为字符串' no Preference '
;
否则,它返回FavoriteColors
值:
SELECT Name,DECODE(FavoriteColors,
NULL,'No Preference',
$LISTTOSTRING(FavoriteColors,'^')) AS ColorPreference
FROM Sample.Person
ORDER BY Name
下面的示例解码颜色首选参数。如果此人只有一种最喜欢的颜色,则该颜色名称将被字母缩写替换。如果用户有多个最喜欢的颜色,则DECODE
返回FavoriteColors
值:
SELECT Name,DECODE(FavoriteColors,
$LISTBUILD('Red'),'R',
$LISTBUILD('Orange'),'O',
$LISTBUILD('Yellow'),'Y',
$LISTBUILD('Green'),'G',
$LISTBUILD('Blue'),'B',
$LISTBUILD('Purple'),'V',
$LISTBUILD('White'),'W',
$LISTBUILD('Black'),'K',
$LISTTOSTRING(FavoriteColors,'^'))
FROM Sample.Person
WHERE FavoriteColors IS NOT NULL
ORDER BY FavoriteColors
请注意,ORDER BY
子句按原始字段值排序。以下示例按解码值排序:
SELECT Name,DECODE(FavoriteColors,
$LISTBUILD('Red'),'R',
$LISTBUILD('Orange'),'O',
$LISTBUILD('Yellow'),'Y',
$LISTBUILD('Green'),'G',
$LISTBUILD('Blue'),'B',
$LISTBUILD('Purple'),'V',
$LISTBUILD('White'),'W',
$LISTBUILD('Black'),'K',
$LISTTOSTRING(FavoriteColors,'^')) AS ColorCode
FROM Sample.Person
WHERE FavoriteColors IS NOT NULL
ORDER BY ColorCode
下面的示例将“Employee”
记录中的“Company code”
字段中的数字代码进行解码,并返回相应的部门名称。
如果员工的公司代码不是1
到10
,DECODE
返回默认的“Admin(non-tech)”
:
SELECT Name,
DECODE (Company,
1, 'TECH MARKETING', 2, 'TECH SALES', 3, 'DOCUMENTATION',
4, 'BASIC RESEARCH', 5, 'SOFTWARE DEVELOPMENT', 6, 'HARDWARE DEVELOPMENT',
7, 'QUALITY TESTING', 8, 'FIELD SUPPORT', 9, 'PHONE SUPPORT',
10, 'TECH TRAINING',
'Admin (non-tech)') AS TechJobs
FROM Sample.Employee WHERE Company<10
该表达式使用Company
作为expr
参数,并使用10
对搜索和结果参数。
默认参数为“Admin(non-tech)”
。
相关文章
- 第三章用sql语句操作数据
- java.sql.SQLException: The SQL statement must not be null or empty.这个错误
- 【学习总结】SQL的学习-2-sql操作
- SQL Server 2008连接字符串写法大全{转}
- 大数据基础之Hive(2)Hive SQL执行过程之SQL解析过程
- SQLServer · 特性分析 · SQL Server 2012的分析函数未必都理解透了(2)
- PHP代码审计示例(一)——淡然点图标系统SQL注入漏洞审计
- Sql Server 取出多个字段列中的最大值和最小值
- Sql Server REPLACE函数
- SQL:将查询结果插入到另一个表的三种情况
- Sql Server substring(expression, start, length)函数
- php自带的几个防止sql注入的函数
- SQL Server DATEADD() 函数
- sql server中自定义函数
- Atitit import sql fun 重要的sql功能扩展 ext 目录 1.1. Insert merge1 1.2. Insert set1 1.2.1. 13.2.5. LOAD
- Atitit sql注入的防范 目录 1.1. 检查数据类型 1 2. 有限操作DML 1 2.1. 限制执行函数黑名单机制 2 2.2. 限制执行系统sp 2 2.3. 限制数据查询语句类型,只能
- SQL语句中关于字符串的拼接问题
- Sql:成功解决将sql输出的datetime时间格式转为常规格式
- SQL基础【二十、索引】(超细致版本,前理论,后实践,应对sql面试绰绰有余)
- 经典SQL语句大全---基本函数
- 【sql优化】(大表小技巧)有时候 2 小时的 SQL 操作,可能只要 1 分钟
- 【编程实践】如何使用 SQL 函数 How To Use Functions in SQL
- sql server 性能排查
- 010-Hadoop Hive sql语法详解5-HiveQL与SQL区别
- 数据库定时删除历史数据的SQL指令
- sql 精读(7)
- sql 精读(三) 标准 SQL 中的编号函数示例
- sql 精读(二) 标准 SQL 中的编号函数
- SQL Union和SQL Union All用法
- SQL Server存储过程
- SQL SUM() 函数
- 6-4Table API and SQL的使用.