NULLIF 函数
功能
通过比较表达式提供缩写的 CASE 表达式。
语法
NULLIF ( expression-1, expression-2 )
参数
expression-1 要比较的表达式。
expression-2 要比较的表达式。
用法
NULLIF 比较两个表达式的值。
如果第一个表达式的值与第二个表达式的值相等,NULLIF 返回 NULL。
如果第一个表达式的值不等于第二个表达式的值,或者第二个表达式为 NULL,则 NULLIF 返回第一个表达式。
NULLIF 函数提供了编写某些 CASE 表达式的简便方法。
标准和兼容性
-
SQL/92 初级特性。
-
SQL/99 核心特性。
示例
下面的语句返回值 a:
SELECT NULLIF( 'a', 'b' )
下面的语句返回 NULL。
SELECT NULLIF( 'a', 'a' )
---------------------------------------------------------------------------------------------------
CASE 表达式
CASE 表达式提供条件 SQL 表达式。Case 表达式可以在能够使用表达式的任何地方使用。
CASE 表达式的语法如下:
CASE expression
WHEN expression
THEN expression, ...
[ ELSE expression ]
END
如果 CASE 语句后的表达式等于 WHEN 语句后的表达式,则返回 THEN 语句后的表达式。否则,返回 ELSE 语句后的表达式(如果它存在)。
例如,以下代码用 CASE 表达式作为 SELECT 语句的第二子句。
SELECT id,
( CASE name
WHEN 'Tee Shirt' then 'Shirt'
WHEN 'Sweatshirt' then 'Shirt'
WHEN 'Baseball Cap' then 'Hat'
ELSE 'Unknown'
END ) as Type
FROM "DBA".Product
可以替换的语法如下:
CASE
WHEN search-condition
THEN expression, ...
[ ELSE expression ]
END
如果满足 WHEN 语句后的搜索条件,则返回 THEN 语句后的表达式。否则,返回 ELSE 语句后的表达式(如果它存在)。
例如,以下语句用 CASE 表达式作为 SELECT 语句的第三子句,以将字符串与搜索条件相关联。
SELECT id, name,
( CASE
WHEN name='Tee Shirt' then 'Sale'
WHEN quantity >= 50 then 'Big Sale'
ELSE 'Regular price'
FROM "DBA".Product
用于简写 CASE 表达式的 NULLIF 函数
NULLIF 函数提供了一种以短格式写出某些 CASE 语句的方法。NULLIF 语法如下:
NULLIF ( expression-1, expression-2 )
NULLIF 比较两个表达式的值。如果第一个表达式的值与第二个表达式的值相等,NULLIF 返回 NULL。如果它们不相等,NULLIF 则返回第一个表达式。
CASE 语句不同于 CASE 表达式不要将 CASE 表达式的语法和 CASE 语句的语法混淆。 |
------------------------------------------------------------------------------------
CASE 语句
说明
此语句用于根据多种情况选择执行路径。
语法 1
CASE value-expression
WHEN [ constant | NULL ] THEN statement-list ...
[ WHEN [ constant | NULL ] THEN statement-list ] ...
[ ELSE statement-list ]
END CASE
语法 2
CASE
WHEN [ search-condition | NULL] THEN statement-list ...
[ WHEN [ search-condition | NULL] THEN statement-list ] ...
[ ELSE statement-list ]
END CASE
用法
语法 1 CASE 语句是控制语句,它允许您根据表达式的值选择要执行的 SQL 语句列表。 value-expression 是具有单值的表达式,它的值可以是字符串、数字、日期或其它 SQL 数据类型。如果 value-expression 的值存在匹配的 WHEN 子句,则执行 WHEN 子句中的 statement-list。如果没有合适的 WHEN 子句而有 ELSE 子句,则执行 ELSE 子句中的 statement-list。执行在 END CASE 后的第一个语句重新开始。
如果 value-expression 可以为空,使用 ISNULL 函数用不同的表达式替换 NULL value-expression。
语法 2 在这种格式下,执行 CASE 语句中第一个满足 search-condition 的语句。如果不满足 search-conditions,则执行 ELSE 子句。
如果表达式可以为 NULL,对第一个 search-condition 使用以下语法:
WHEN search-condition IS NULL THEN statement-list
权限
无。
副作用
无。
标准和兼容性
SQL/92 持久存储模块特性。SQL/99 持久存储模块特性。
示例
下面的过程使用 CASE 语句,将示例数据库的产品表中列出的产品分为衬衣、帽子、短裤、未知几大类。
CREATE PROCEDURE ProductType (IN product_id INT, OUT type CHAR(10))
BEGIN
DECLARE prod_name CHAR(20);
SELECT name INTO prod_name FROM "DBA"."product"
WHERE id = product_id;
CASE prod_name
WHEN 'Tee Shirt' THEN
SET type = 'Shirt'
WHEN 'Sweatshirt' THEN
SET type = 'Shirt'
WHEN 'Baseball Cap' THEN
SET type = 'Hat'
WHEN 'Visor' THEN
SET type = 'Hat'
WHEN 'Shorts' THEN
SET type = 'Shorts'
ELSE
SET type = 'UNKNOWN'
END CASE;
END
下面的示例使用语法 2 生成关于示例数据库中产品数量的消息。
CREATE PROCEDURE StockLevel (IN product_id INT)
BEGIN
DECLARE qty INT;
SELECT quantity INTO qty FROM product
WHERE id = product_id;
CASE
WHEN qty < 30 THEN
MESSAGE 'Order Stock' TO CLIENT;
WHEN qty > 100 THEN
MESSAGE 'Overstocked' TO CLIENT;
ELSE
MESSAGE 'Sufficient stock on hand' TO CLIENT;
END CASE;
END
相关推荐
Oracle中的NVL,NVL2,NULLIF,COALESCE通用函数
--2. 创建类型体 Create Or Replace Type Body Strcat_type Is Static Function ODCIAggregateInitialize( cs_ctx In Out strcat_type )Return Number is Begin cs_ctx := strcat_type( Null ); Return...
第16章 DECODE和CASE.SQL中的if-fhen-else 第17章 创建和管理表、视图、索引、群集和序列 第18章 分区 第19章 Oracle基本安全 第Ⅲ部分 高级主题 第20章 高级安全性-虚拟专用数据库 第21章 高级安全性:透明数据加密...
其一、就业面广:全球前100强企业99家都在使用ORACLE相关技术,中国政府机构,大中型企事业单位都能有ORACLE技术的工程师岗位。 其二、技术层次深:如果期望进入IT服务或者产品公司(类似毕博、DELL、IBM等),...
在PL/SQL块中使用SELECT语句时注意几点: (1)SELECT语句必须含有INTO子句。 (2)INTO子句后的变量个数和位置及数据类型必须和SELECT命令后的字段名表相同。 (3)INTO子句后可以是简单类型变量或组合类型变量。 ...
第16章 DECODE和CASE.SQL中的if-fhen-else 第17章 创建和管理表、视图、索引、群集和序列 第18章 分区 第19章 Oracle基本安全 第Ⅲ部分 高级主题 第20章 高级安全性-虚拟专用数据库 第21章 高级安全性:透明数据加密...
Oracle中的SUM条件查询 1、按照区域编码分组查询区域编码、IPTV_NBR不为空的数量、ACC_NBR不为空的数量、所有用户数量 SELECT AREA_CODE, SUM ( CASE WHEN IPTV_NBR IS NULL or IPTV_NBR = '' THEN 0 ELSE 1 END ),...
42、select ename, hiredate from emp where hiredate > to_date('1981-2-20 12:24:45','YYYY-MM-DD HH24:MI:SS'); --(函数to-date 查询公司在所给时间以后入职的人员) 43、select sal from emp where sal > to_...
create or replace function f_getFirstOrFullSpell(p_cnStr In varchar2,p_sign In number default null) return varchar2 as lv_spell varchar2(200); lv_temp Varchar2(10); lv_char varchar2(10); --lv_...
ORA-01035: ORACLE 只允许具有 RESTRICTED SESSION 权限的用户使用 6、startup force 强制启动方式 当不能关闭数据库时,可以用startup force来完成数据库的关闭 先关闭数据库,再执行正常启动数据库命令 7、...
§8.1.1 DECODE 中的if-then-else逻辑 188 §8.1.2 DECODE 的简单例子 188 §8.1.3 DECODE实现表的转置 189 §8.2 关于访问远程数据库 192 §8.2.1 数据库链接 192 §8.2.2 使用同义词获得本地透明 193 §8.2.3 在...
在SQL *Plus中使用函数 37 1.字符串函数 37 2.数字函数 37 3.日期时间函数 38 4.转换函数 38 第五讲 修改SQL数据与SQL*Plus命令 40 一.添加数据 40 1.Insert Into 表名 [ 字段列表 ] Values (值) 40 2.向表中插入...
15.4.4 范例15-2:ex2.p1 MSS上persons.sql的Perl ADO,无DSN 15.4.5 范例15-3:ex3.p1 MS SQL Server上的Perl DBI范例 15.4.6 范例15-4:ex4.p1 MSS上persons.sql的Perl DBl 15.5 使用ADO和DBI访问...
0875 如何使用Nullif()函数来处理空值 516 0876 查询空值(NULL)的技巧 517 0877 利用关键字DISTINCT去除重复记录 517 0878 巧用TOP子句获取信息 518 0879 巧用CONTAINS谓词检索信息 518 0880 通过IS...
10.1.2 在子查询中使用聚合函数 188 10.2 创建和使用返回多行的子查询 190 10.2.1 in子查询 190 10.2.2 in子查询实现集合交和集合差运算 191 10.2.3 exists子查询 192 10.2.4 exists子查询实现两表交集 194 ...
实验35:在块中使用循环,三种循环模式 72 实验36:在块中自定义数据类型,使用复合变量 73 实验37:在块中使用自定义游标 76 实验38:在块中处理错误exception 78 编写程序 80 实验39:触发器 80 实验40:编写函数 ...
10.1.2 在子查询中使用聚合函数 10.2 创建和使用返回多行的子查询 10.2.1 IN子查询 10.2.2 IN子查询实现集合交和集合差运算 10.2.3 EXISTS子查询 10.2.4 EXISTS子查询实现两表交集 10.2.5 SOME/ALL...
ORA-01035: ORACLE 只允许具有 RESTRICTED SESSION 权限的用户使用 6、startup force 强制启动方式 当不能关闭数据库时,可以用startup force来完成数据库的关闭 先关闭数据库,再执行正常启动数据库命令 7、...
1 CREATE OR REPLACE FUNCTION isnumeric (str IN ... 6 IF str IS NULL 7 THEN 8 RETURN 0; 9 ELSE 10 v_str := translate(str, '.0123456789', '.'); 11 12 IF v_str = '.' OR v_str = '+.' OR v_str
11 <br>0025 如何使用不安全代码 11 <br>第2章 语言基础 13 <br>2.1 注释 14 <br>0026 如何对代码进行注释 14 <br>0027 #region、#endregion关键字的使用技巧 14 <br>0028 “///”符号...