文章目录

  • 第二十九章 SQL函数 COALESCE
  • 大纲
  • 描述
  • 返回值的数据类型
  • 比较NULL处理函数
  • 示例

第二十九章 SQL函数 COALESCE

返回第一个非空表达式的值的函数。

大纲

COALESCE(expression,expression [,...])
  • expression - 要计算的一系列表达式。多个表达式被指定为逗号分隔的列表。此表达式列表限制为140个表达式。

描述

COALESSE函数按从左到右的顺序计算表达式列表,并返回第一个非空表达式的值。如果所有表达式的计算结果都为NULL,则返回NULL

字符串返回时保持不变;保留前导和尾随空格。数字以规范形式返回,去掉了前导零和尾随零。

返回值的数据类型

非数字表达式(如字符串或日期)必须都属于相同的数据类型,并返回该数据类型的值。指定数据类型不兼容的表达式会导致SQLCODE-378错误,并显示DataType不匹配错误消息。可以使用CAST函数将表达式转换为兼容的数据类型。

数值表达式可以是不同的数据类型。如果指定具有不同数据类型的数值表达式,则返回的数据类型是与所有可能的结果值最兼容的表达式数据类型,即具有最高数据类型优先级的数据类型。

文字值(字符串、数字或NULL)被视为数据类型VARCHAR。如果只指定两个表达式,则文字值与数值表达式兼容:如果第一个表达式是数值表达式,则返回其数据类型;如果第一个表达式是文字值,则返回VARCHAR数据类型。

比较NULL处理函数

下表显示了各种SQL比较函数。如果逻辑比较测试为True(AB相同),则每个函数返回一个值;如果逻辑比较测试为False(AB不同),则每个函数返回另一个值。这些函数允许执行空逻辑比较。不能在实际相等(或不相等)条件比较中指定NULL

SQL函数 比较测试 返回值
COALESCE(ex1,ex2,…) ex = NULL for each argument True tests next ex argument. If all ex arguments are True (NULL), returns NULL. False returns ex
IFNULL(ex1,ex2) [two-argument form] ex1 = NULL True returns ex2 False returns NULL
IFNULL(ex1,ex2) [three-argument form] ex1 = NULL True returns ex2 False returns ex3
{fn IFNULL(ex1,ex2)} ex1 = NULL True returns ex2 False returns ex1
ISNULL(ex1,ex2) ex1 = NULL True returns ex2 False returns ex1
NVL(ex1,ex2) ex1 = NULL True returns ex2 False returns ex1
NULLIF(ex1,ex2) ex1 = ex2 True returns NULL False returns ex1

示例

下面的嵌入式SQL示例接受一系列主机变量值,并返回第一个非空的(值d)。请注意,ObjectScript空字符串("")在 SQL中被转换为NULL

ClassMethod Coalesce()
{s (a, b, c, e) = ""s d = "firstdata"s f = "nextdata"&sql(SELECT COALESCE(:a,:b,:c,:d,:e,:f) INTO :x)if SQLCODE '= 0 {w !,"Error code ",SQLCODE } else {w !,"The first non-null value is: ",x }
}
DHC-APP>d ##class(PHA.TEST.SQLCommand).Coalesce()The first non-null value is: firstdata

下面的示例按从左到右的顺序比较两列的值,并返回第一个非空列的值。对于某些行,FavoriteColors列为NULLHome_State列从不为NULL。为了让Coalesce将两者进行比较,FavoriteColors必须转换为字符串:

SELECT TOP 25 Name,FavoriteColors,Home_State,
COALESCE(CAST(FavoriteColors AS VARCHAR),Home_State) AS CoalesceCol
FROM Sample.Person

以下动态SQL示例将COALESCE与其他NULL处理函数进行比较:

ClassMethod Coalesce1()
{s myquery = "SELECT TOP 50 %ID,"_"IFNULL(FavoriteColors,'blank') AS Ifn2Col,"_"IFNULL(FavoriteColors,'blank','value') AS Ifn3Col,"_"COALESCE(CAST(FavoriteColors AS VARCHAR),Home_State) AS CoalesceCol,"_"ISNULL(FavoriteColors,'blank') AS IsnullCol,"_"NULLIF(FavoriteColors,$LISTBUILD('Orange')) AS NullifCol,"_"NVL(FavoriteColors,'blank') AS NvlCol"_" FROM Sample.Person"s tStatement = ##class(%SQL.Statement).%New()s qStatus = tStatement.%Prepare(myquery)if qStatus '= 1 {w "%Prepare failed:" d $System.Status.DisplayError(qStatus) q}s rset = tStatement.%Execute()d rset.%Display()w !,"End of data"
}
DHC-APP>d ##class(PHA.TEST.SQLCommand).Coalesce1()
ID      Ifn2Col Ifn3Col CoalesceCol     IsnullCol       NullifCol       NvlCol
1               value   $lb("Red","Orange","Yellow")    $lb("Red","Orange","Yellow")    $lb("Red","Orange","Yellow")    $lb("Red","Orange","Yellow")
2       blank   blank           blank           blank
6       blank   blank           blank           blank
9       blank   blank           blank           blank
10      blank   blank           blank           blank
13              value   $lb("Red","Orange","Yellow","Green")    $lb("Red","Orange","Yellow","Green")    $lb("Red","Orange","Yellow","Green")    $lb("Red","Orange","Yellow","Green")
14              value   ReOrangYellowGreen     $lb("Red","Orange","Yellow","Green","Green")    $lb("Red","Orange","Yellow","Green","Green")    $lb("Red","Orange","Yellow","Green","Green")
15              value   ReOrangYellowGreen     $lb("Red","Orange","Yellow","Green","Yellow")   $lb("Red","Orange","Yellow","Green","Yellow")   $lb("Red","Orange","Yellow","Green","Yellow")
16              value   $lb("White")    $lb("White")    $lb("White")    $lb("White")
17              value   $lb("Black")    $lb("Black")    $lb("Black")    $lb("Black")
18              value   $lb("Green","White")    $lb("Green","White")    $lb("Green","White")    $lb("Green","White")
19              value   $lb("Purple")   $lb("Purple")   $lb("Purple")   $lb("Purple")
20              value   $lb("Yellow")   $lb("Yellow")   $lb("Yellow")   $lb("Yellow")
21              value   $lb("Red","Red")        $lb("Red","Red")        $lb("Red","Red")        $lb("Red","Red")
22              value   $lb("Black","Black")    $lb("Black","Black")    $lb("Black","Black")    $lb("Black","Black")
23      blank   blank   MT      blank           blank
24              value   $lb("Blue")     $lb("Blue")     $lb("Blue")     $lb("Blue")
25      blank   blank   WY      blank           blank
26              value   $lb("White")    $lb("White")    $lb("White")    $lb("White")
27              value   $lb("Orange")   $lb("Orange")           $lb("Orange")
28              value   $lb("Orange","White")   $lb("Orange","White")   $lb("Orange","White")   $lb("Orange","White")
29              value   $lb("Black")    $lb("Black")    $lb("Black")    $lb("Black")
30              value   $lb("Red","Green")      $lb("Red","Green")      $lb("Red","Green")      $lb("Red","Green")
31              value   $lb("Purple")   $lb("Purple")   $lb("Purple")   $lb("Purple")
32              value   $lb("Green","Red")      $lb("Green","Red")      $lb("Green","Red")      $lb("Green","Red")
33      blank   blank   TX      blank           blank
34              value   $lb("Blue","Green")     $lb("Blue","Green")     $lb("Blue","Green")     $lb("Blue","Green")
35              value   $lb("Yellow")   $lb("Yellow")   $lb("Yellow")   $lb("Yellow")
36              value   $lb("Red","Blue")       $lb("Red","Blue")       $lb("Red","Blue")       $lb("Red","Blue")
37      blank   blank   HI      blank           blank
38      blank   blank   OR      blank           blank
39      blank   blank   NM      blank           blank
40      blank   blank   NJ      blank           blank
41      blank   blank   NY      blank           blank
42              value   $lb("Black","Orange")   $lb("Black","Orange")   $lb("Black","Orange")   $lb("Black","Orange")
43              value   $lb("Blue")     $lb("Blue")     $lb("Blue")     $lb("Blue")
44      blank   blank   MO      blank           blank
45              value   $lb("Purple","Yellow")  $lb("Purple","Yellow")  $lb("Purple","Yellow")  $lb("Purple","Yellow")
46              value   $lb("Orange")   $lb("Orange")           $lb("Orange")
47              value   $lb("Yellow","Green")   $lb("Yellow","Green")   $lb("Yellow","Green")   $lb("Yellow","Green")
48              value   $lb("Blue","Blue")      $lb("Blue","Blue")      $lb("Blue","Blue")      $lb("Blue","Blue")
49              value   $lb("Blue")     $lb("Blue")     $lb("Blue")     $lb("Blue")
50              value   $lb("White","Red")      $lb("White","Red")      $lb("White","Red")      $lb("White","Red")
51              value   $lb("White","Green")    $lb("White","Green")    $lb("White","Green")    $lb("White","Green")
52      blank   blank   MT      blank           blank
53              value   $lb("Red")      $lb("Red")      $lb("Red")      $lb("Red")
54      blank   blank   MD      blank           blank
55              value   $lb("Orange","Orange")  $lb("Orange","Orange")  $lb("Orange","Orange")  $lb("Orange","Orange")
56      blank   blank   MD      blank           blank
57              value   $lb("White")    $lb("White")    $lb("White")    $lb("White")50 Rows(s) Affected
End of data

第二十九章 SQL函数 COALESCE相关推荐

  1. 第二十九章 SQL命令 DISTINCT

    文章目录 第二十九章 SQL命令 DISTINCT 大纲 参数 描述 DISTINCT和ORDER BY DISTINCT和GROUP BY 字母大小写与DISTINCT优化 DISTINCT的其他用 ...

  2. 第二十四章 SQL函数 CEILING

    文章目录 第二十四章 SQL函数 CEILING 大纲 参数 描述 示例 第二十四章 SQL函数 CEILING 数值函数,返回大于或等于给定数值表达式的最小整数. 大纲 CEILING(numeri ...

  3. 第六十九章 SQL函数 JSON_OBJECT

    文章目录 第六十九章 SQL函数 JSON_OBJECT 大纲 参数 描述 选择模式和排序 ABSENT ON NULL 示例 第六十九章 SQL函数 JSON_OBJECT 将数据作为JSON对象返 ...

  4. 第二十二章 SQL函数 CAST(一)

    文章目录 第二十二章 SQL函数 CAST(一) 大纲 参数 描述 转换数字 字符串类型转换 转换为DATE.TIME和TIMESTAMP 转换NULL和空字符串 转换日期 第二十二章 SQL函数 C ...

  5. 第二十五章 SQL函数 CHAR

    文章目录 第二十五章 SQL函数 CHAR 大纲 参数 描述 示例 第二十五章 SQL函数 CHAR 返回具有在字符串表达式中指定的ASCII代码值的字符的字符串函数. 大纲 CHAR(code-va ...

  6. 第六十六章 SQL函数 ISNULL

    文章目录 第六十六章 SQL函数 ISNULL 大纲 参数 描述 日期和时间显示转换 比较的NULL处理函数 示例 第六十六章 SQL函数 ISNULL 测试NULL并返回相应表达式的函数. 大纲 I ...

  7. 第十九章 Caché 函数大全 $INCREMENT 函数

    文章目录 第十九章 Caché 函数大全 $INCREMENT 函数 大纲 参数 描述 参数 variable num INCREMENT或INCREMENT或INCREMENT或SEQUENCE $ ...

  8. 第二十二章 SQL命令 CREATE TRIGGER(二)

    文章目录 第二十二章 SQL命令 CREATE TRIGGER(二) SQL触发器代码 ObjectScript触发代码 字段引用和伪字段引用 引用流属性 引用SQLComputed属性 标签 方法调 ...

  9. 【正点原子FPGA连载】 第二十九章TFT LCD画板实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

    1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670 3)全套实验源码+手册+视频下载地址: h ...

最新文章

  1. haproxy keepalived_详解mycat+haproxy+keepalived搭建高可用负载均衡mysql集群
  2. SAP 自动付款的配置
  3. “365算法每日学计划”:01打卡
  4. php mysql记录用户行为_PHP实现用session来实现记录用户登陆信息
  5. php document.getel,javascript 密码强弱度检测万能插件_javascript技巧
  6. php 类分开写,自己前几天写的无限分类类_PHP教程
  7. mysql分组后再分组_全网最全的mysql分组后取topN的解答
  8. ubuntu16.04 每次开机都显示“System program problem detected”
  9. 基于LSTM的【气象数据+发电数据】多步时序数据建模预测分析实战
  10. 左手云通讯,右手AI,容联为何能成为云联络中心“风向标”?
  11. nginx 返回动态Html,Nginx动态、静态分离,Nginx配置中做适配
  12. 史上好电影集合--百度云
  13. eps提取高程点在哪里_只需一个命令,就能提取CAD图纸所有高程点坐标,感觉学费白交了...
  14. ChatGPT账号没封的看过来,与ChatGPT玩个超级创意游戏
  15. PHP云盘网盘系统源码+快速对接多家云存储+VIP付费下载功能
  16. RegNet: Designing Network Design Spaces
  17. 一个苦逼程序员日常的 10 个扎心瞬间
  18. ACM-ICPC 2017 Asia QingDao:喜,抑或是悲?幸运,抑或是倒霉?退役!!!
  19. 猫眼郑志昊:互联网没有价值网,就没有下半场
  20. 贵州大学计算机学院的老师,贵州大学计算机科学与信息学院导师介绍:龙飞

热门文章

  1. VB6对接语音验证码接口DEMO示例
  2. 2023最新网盘不限速下载方法
  3. 《七哥说道》第一章:风雨知秋之进城三人
  4. matlab加速度积分计算速度和位移
  5. 【ProVerif学习笔记】3:进程宏和进程书写的语法规则
  6. centos命令行初始化配置
  7. Flask asyncio 异步处理请求
  8. 【游戏思路】制作简单小游戏实现思路总结
  9. 【日常】某B视频网站模拟登录尝试
  10. 邮件自动被服务器删除,如何防止outlook等邮件客户端删除服务器上的邮件数据?...