将空值转换为实际值

创建测试用表:

CREATE OR REPLACE VIEW v AS
SELECT NULL AS c1, NULL AS c2, ‘1‘ AS c3, NULL AS c4, ‘2‘ AS c5 FROM dual
UNION ALL
SELECT NULL AS c1, NULL AS c2, NULL AS c3, ‘3‘ AS c4, ‘2‘ AS c5 FROM dual;
SELECT * FROM v;

如果要查询列c3的值,当c3列为空时,把它显示为0,有以下两种方式:

-- 使用nvl函数
SELECT NVL(c3, ‘0‘) c3 FROM v;

-- 使用coalesce函数
SELECT COALESCE(c3, ‘0‘) c3 FROM v;

查询结果如下:

如果要查询列c1到c5中,第一个不为空的值,也有下面的两种方式:

-- 方法一
SELECT NVL(NVL(NVL(NVL(c1, c2), c3), c4), c5) AS c from v;

-- 方法二
SELECT COALESCE(c1, c2, c3, c4, c5) AS c FROM v;

查询结果如下:

可以看到,相对于nvl来说,coalesce支持多个参数,能很方便的返回第一个不为空的值。

时间: 2024-10-18 05:03:01

将空值转换为实际值的相关文章

强制转换为右值

在C++11中,标准库在<utility>中提供了一个有用的函数std::move,这个函数的名字具有迷惑性,因为实际上std::move并不能移动任何东西,它唯一的功能是将一个左值强制转化为右值引用,继而我们可以通过右值引用使用该值,以用于移动语义.从实现上讲,std::move基本等同于一个类型转换: static_cast<T&&>(lvalue); 值得一提的是,被转化的左值,其生命期并没有随着左右值的转化而改变. #include <iostream

C++11 std::move 强制转换为右值

[1]std::move 在C++11中,标准库在<utility>中提供了一个有用的函数std::move. 这个函数的名字很具有迷惑性,因为实际上std::move并不能移动任何东西,它唯一的功能:将一个左值强制转化为右值引用,继而可以通过右值引用使用该值,以用于移动语义. 从实现上讲,std::move基本等同于一个类型转换: static_cast<T&&>(lvalue); [2]应用注意项 (1)被std::move转化的左值,其生命期并没有随着转化而改

DICOM图像像素值(灰度值)转换为CT值

CT值的单位是Hounsfield,简称为Hu,范围是-1024-3071.用于衡量人体组织对X射线的吸收率,设定水的吸收率为0Hu. 在DICOM图像读取的过程中,我们会发现图像的像素值有可能不是这个范围,通常是0-4096,这是我们常见到的像素值或者灰度值,这就需要我们在图像像素值(灰度值)转换为CT值. 首先,需要读取两个DICOM Tag信息,(0028|1052):rescale intercept和(0028|1053):rescale slope. 然后通过公式: Hu = pix

C# 给枚举定义DescriptionAttribute,把枚举转换为键值对

在C#中,枚举用来定状态值很方便,例如我定义一个叫做Season的枚举 public enum Season { Spring = 1, Summer = 2, Autumn = 3, Winter = 4 } 枚举名是不能出现空格,()-/等字符 我们想把Spring显示为春天,我们要自己定义说明信息,我们可以使用DescriptionAttribute,如下 public enum Season { [Description("春 天")] Spring = 1, [Descrip

可空值类型与值类型这间的转换

int s = 5; int? s_null; long t; long? t_null; t = s; //隐式转换 S -> T s = (int)t; //显示转换 T -> S s_null = s; //隐式转换 S -> S? s = (int)s_null; //显示转换 S? -> T t_null = s_null; //隐式转换 S? -> T? s_null = (int?)t_null; //显示转换 T? -> S? t_null = s; /

db2 将逗号分隔数据转换为多值IN列表

将逗号分隔数据转换为多值IN列表 2010-03-15 11:16:59|  分类: 数据库技术|举报|字号 订阅 下载LOFTER我的照片书  | 原文:http://book.csdn.net/bookfiles/530/10053017906.shtml 6.11       将分隔数据转换为多值IN列表 问题 已经有了分隔数据,想要将其转换为WHERE子句IN列表中的项目.考虑下面的字符串: 7654,7698,7782,7788 要将该字符串用在WHERE子句中,但是下面的SQL语句是

c语言实现灰度图转换为二值图

将上篇得到的灰度图转换为二值图,读取像素数据,低于某一值置0,否则设置为255,为得到更好的效果不同图片应采用不同的值 1 /* 2 2015年6月2日11:16:22 3 灰度图转换为二值图 4 blog:http://www.cnblogs.com/wd1001/ 5 */ 6 #include<stdio.h> 7 #include<malloc.h> 8 #include<stdlib.h> 9 /* 10 位图头结构 11 */ 12 #pragma pack

字节大小转换为文本值描述, 仅显示用...

看代码... uses System.Math; // *************************************************************************** // 字节大小转换为文本值描述 // 刘志林 // 2017-11-06 // http://www.cnblogs.com/lzl_17948876/ // [email protected] // ---------------------------------------------

6.11 将分割数据转换为多值IN列表

问题 已经有了分隔数据,想要将其转换为WHERE子句IN列表中的项目.考虑下面的字符串: 7654,7698,7782,7788 要将该字符串用在WHERE子句中,但是下面的SQL语句是错误的,因为EMPNO是一个数值列: select ename,sal,deptno from emp where empno in ( '7654,7698,7782,7788' ) 因为EMPNO是一个数值列,而此IN列表是一个字符串值,所以此SQL语句会失败.现要将此字符串转换为用逗号分解的数值列表. 解决