文章目录

  • 第六十三章 SQL函数 IFNULL
  • 大纲
  • 参数
  • 描述
  • 返回值数据类型
  • 日期和时间显示转换
  • %List显示转换
  • NULL处理函数比较
  • 示例

第六十三章 SQL函数 IFNULL

测试NULL并返回适当表达式的函数。

大纲

IFNULL(expression-1,expression-2 [,expression-3]){fn IFNULL(expression-1,expression-2)}

参数

  • expression-1 - 要计算以确定是否为NULL的表达式。
  • expression-2 - 如果expression-1NULL,则返回的表达式。
  • expression-3 - 可选-如果expression-1不是NULL返回的表达式。
    如果没有指定expression-3,则当expression-1不是NULL时返回NULL值。

返回的数据类型描述如下。

描述

支持IFNULL作为SQL通用函数和ODBC标量函数。
请注意,虽然这两个执行非常相似的操作,但它们在功能上是不同的。
SQL通用函数支持三个参数。
ODBC标量函数支持两个参数。
SQL通用函数和ODBC标量函数的双参数形式是不一样的;
expression-1不为空时,它们返回不同的值。

SQL通用函数计算表达式1是否为NULL。
它永远不会返回expression-1:

  • 如果expression-1NULL,则返回expression-2
  • 如果expression-1不为NULL,则返回expression-3
  • 如果expression-1不为NULL,并且没有expression-3,则返回NULL

ODBC标量函数计算expression-1是否为NULL
它要么返回expression-1,要么返回expression-2:

  • 如果expression-1为NULL,则返回expression-2
  • 如果expression-1不为NULL,则返回expression-1

返回值数据类型

  • IFNULL(expression-1,expression-2):返回expression-2的数据类型。
    如果expression-2是数值字面值,则字符串字面值或NULL返回数据类型VARCHAR
  • IFNULL(expression-1,expression-2,expression-3):如果expression-2expression-3具有不同的数据类型,则返回数据类型优先级更高(包容性更强)的数据类型。
    如果expression-2expression-3是数值字面值或字符串字面值,则返回数据类型VARCHAR
    如果expression-2expression-3NULL,则返回非NULL参数的数据类型。

如果expression-2expression-3的长度、精度或比例不同,则IFNULL返回两个表达式的更大长度、精度或比例。

  • {fn IFNULL(expression-1,expression-2)}:返回expression-1的数据类型。
    如果expression-1是数字字面值、字符串字面值或NULL,则返回数据类型VARCHAR

日期和时间显示转换

一些expression-1数据类型需要从逻辑模式(模式0)转换为ODBC模式(模式1)或显示模式(模式2)。例如DATE和TIME数据类型。
如果expression-2expression-3的值不是相同的数据类型,则不能在ODBC模式或Display模式下转换该值,并产生一个SQLCODE错误:DATE数据类型为-146;
-147TIME数据类型。
例如,IFNULL(DOB,'nodate',DOB)不能在ODBC模式或显示模式中执行;
它会发出一个SQLCODE -146错误,其中有%msg Error: 'nodate' is an invalid ODBC/JDBC Date value or Error: 'nodate' is an invalid DISPLAY Date value.
要在ODBC模式或Display模式下执行此语句,必须将该值转换为适当的数据类型:IFNULL(DOB,CAST('nodate' as DATE),DOB)
这将产生日期0,显示为1840-12-31

%List显示转换

%LIST字段是带编码的字符串数据类型字段。如果Expression-1%List字段,则相应的Expression-2Expression-3值取决于选择模式:

  • 在逻辑模式(模式0)或显示模式(模式2)中,%List值作为字符串数据类型返回,格式为$lb("element1","element2",…)
    因此,expression-2expression-3的值必须指定为%List,示例如下:
/// d ##class(PHA.TEST.SQLCommand).IfNull()
ClassMethod IfNull()
{s myquery=3s myquery(1)="SELECT TOP 20 Name,"s myquery(2)="IFNULL(FavoriteColors,$LISTBUILD('No Preference'),FavoriteColors) AS ColorChoice "s myquery(3)="FROM Sample.Person"s tStatement = ##class(%SQL.Statement).%New(2)  // 2=Display modes qStatus = tStatement.%Prepare(.myquery)s rset = tStatement.%Execute()d rset.%Display()
}
DHC-APP>d ##class(PHA.TEST.SQLCommand).IfNull()
Name    ColorChoice
yaoxin  $lb("Red","Orange","Yellow")
xiaoli  $lb("No Preference")
姚鑫    $lb("No Preference")
姚鑫    $lb("No Preference")
姚鑫    $lb("No Preference")
姚鑫    $lb("Red","Orange","Yellow","Green")
姚鑫    $lb("Red","Orange","Yellow","Green","Green")
Isaacs,Roberta Z.       $lb("Red","Orange","Yellow","Green","Yellow")
Chadwick,Zelda S.Chadwick,Zelda S.Chadwick,Zelda S.Chadwick,Zelda S.Chadwick,Zelda S.   $lb("White")
Fives,James D.  $lb("Black")
Vonnegut,Jose P.        $lb("Green","White")
Chadbourne,Barb B.      $lb("Purple")
Quigley,Barb A. $lb("Yellow")
O'Rielly,Chris H.       $lb("Red","Red")
Willeke,Alvin L.        $lb("Black","Black")
Orwell,John V.  $lb("No Preference")
Umansky,Susan C.        $lb("Blue")
Kratzmann,Kirsten C.    $lb("No Preference")
Ng,Josephine Z. $lb("White")
Zevon,Heloisa O.        $lb("Orange")20 Rows(s) Affected
  • 在ODBC模式(模式1)中,%List值作为逗号分隔的元素字符串返回:element1element2、…
    因此,expression-2expression-3的值可以指定为字符串,示例如下:
/// d ##class(PHA.TEST.SQLCommand).IfNull1()
ClassMethod IfNull1()
{s myquery=3s myquery(1)="SELECT TOP 20 Name,"s myquery(2)="IFNULL(FavoriteColors,'No Preference',FavoriteColors) AS ColorChoice "s myquery(3)="FROM Sample.Person"s tStatement = ##class(%SQL.Statement).%New(1)  // 1=ODBC modes qStatus = tStatement.%Prepare(.myquery)s rset = tStatement.%Execute()d rset.%Display()
}
DHC-APP>d ##class(PHA.TEST.SQLCommand).IfNull1()
Name    ColorChoice
yaoxin  $lb("Red","Orange","Yellow")
xiaoli  No Preference
姚鑫    No Preference
姚鑫    No Preference
姚鑫    No Preference
姚鑫    $lb("Red","Orange","Yellow","Green")
姚鑫    $lb("Red","Orange","Yellow","Green","Green")
Isaacs,Roberta Z.       $lb("Red","Orange","Yellow","Green","Yellow")
Chadwick,Zelda S.Chadwick,Zelda S.Chadwick,Zelda S.Chadwick,Zelda S.Chadwick,Zelda S.   $lb("White")
Fives,James D.  $lb("Black")
Vonnegut,Jose P.        $lb("Green","White")
Chadbourne,Barb B.      $lb("Purple")
Quigley,Barb A. $lb("Yellow")

NULL处理函数比较

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

SQL Function Comparison Test Return Value
IFNULL(ex1,ex2) [two-argument form] ex1 = NULL True returns ex2 False returns NULL
IFNULL(ex1,ex2,ex3) [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
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

示例

在下面的例子中,通用函数和ODBC标量函数都返回第二个表达式(99),因为第一个表达式是NULL:

SELECT IFNULL(NULL,99) AS NullGen,{fn IFNULL(NULL,99)} AS NullODBC99 99

在下面的示例中,通用函数和ODBC标量函数示例返回不同的值。
通用函数返回<null>,因为第一个表达式不是null
ODBC示例返回第一个表达式(33),因为第一个表达式不是NULL:

SELECT IFNULL(33,99) AS NullGen,{fn IFNULL(33,99)} AS NullODBCNUll   33

下面的动态SQL示例返回字符串'No Preference',如果FavoriteColorsNULL;
否则,返回NULL:

/// d ##class(PHA.TEST.SQLCommand).IfNull2()
ClassMethod IfNull2()
{s myquery=3s myquery(1)="SELECT Name,"s myquery(2)="IFNULL(FavoriteColors,'No Preference') AS ColorChoice "s myquery(3)="FROM Sample.Person"s tStatement = ##class(%SQL.Statement).%New()s qStatus = tStatement.%Prepare(.myquery)s rset = tStatement.%Execute()d rset.%Display()w !,"End of data"
}
DHC-APP>d ##class(PHA.TEST.SQLCommand).IfNull2()
Name    ColorChoice
yaoxin
xiaoli  No Preference
姚鑫    No Preference
姚鑫    No Preference
姚鑫    No Preference
姚鑫
姚鑫
Isaacs,Roberta Z.

下面的动态SQL示例返回字符串'No Preference',如果FavoriteColorsNULL;
否则,它返回FavoriteColors的值:

ClassMethod IfNull3()
{s myquery=3s myquery(1)="SELECT Name,"s myquery(2)="IFNULL(FavoriteColors,'No Preference',FavoriteColors) AS ColorChoice "s myquery(3)="FROM Sample.Person"s tStatement = ##class(%SQL.Statement).%New()s tStatement.%SelectMode=2s qStatus = tStatement.%Prepare(.myquery)s rset = tStatement.%Execute()d rset.%Display()w !,"End of data"
}
DHC-APP>d ##class(PHA.TEST.SQLCommand).IfNull3()
Name    ColorChoice
yaoxin  $lb("Red","Orange","Yellow")
xiaoli  No Preference
姚鑫    No Preference
姚鑫    No Preference
姚鑫    No Preference
姚鑫    $lb("Red","Orange","Yellow","Green")
姚鑫    $lb("Red","Orange","Yellow","Green","Green")

下面的例子返回字符串'No Preference'如果FavoriteColorsNULL;
否则,返回字符串'Preference':

SELECT sqlName,
IFNULL(FavoriteColors,'No Preference','Preference') AS ColorPref
FROM Sample.Person

下面的ODBC语法示例如果FavoriteColors为NULL,则返回字符串’No Preference’,否则返回FavoriteColors数据值:

SELECT Name,{fn IFNULL(FavoriteColors,$LISTBUILD('No Preference'))} AS ColorPref
FROM Sample.Person

/// d ##class(PHA.TEST.SQLCommand).IfNull4()
ClassMethod IfNull4()
{s myquery=3s myquery(1)="SELECT Name,"s myquery(2)="{fn IFNULL(FavoriteColors,'No Preference')} AS ColorChoice "s myquery(3)="FROM Sample.Person"s tStatement = ##class(%SQL.Statement).%New()s tStatement.%SelectMode=1s qStatus = tStatement.%Prepare(.myquery)s rset = tStatement.%Execute()d rset.%Display()w !,"End of data"
}
DHC-APP>d ##class(PHA.TEST.SQLCommand).IfNull4()
Name    ColorChoice
yaoxin  Red,Orange,Yellow
xiaoli  No Preference
姚鑫    No Preference
姚鑫    No Preference
姚鑫    No Preference
姚鑫    Red,Orange,Yellow,Green
姚鑫    Red,Orange,Yellow,Green,Green
Isaacs,Roberta Z.       Red,Orange,Yellow,Green,Yellow

下面的例子在WHERE子句中使用了IFNULL
它挑选了21岁以下没有最喜欢的颜色偏好的人。
如果FavoriteColorsNULL, IFNULL返回Age字段值,用于条件测试:

SELECT Name,FavoriteColors,Age
FROM Sample.Person
WHERE 21 > IFNULL(FavoriteColors,Age)
ORDER BY Age

类似的功能可以参考NULL谓词(IS NULL, IS NOT NULL)。

第六十三章 SQL函数 IFNULL相关推荐

  1. 第二十三章 SQL函数 CAST(二)

    文章目录 第二十三章 SQL函数 CAST(二) 转换位值 示例 第二十三章 SQL函数 CAST(二) 转换位值 可以将expr值转换为BIT以返回0或1. 如果expr为1或任何其他非零数值,则返 ...

  2. 第四十三章 SQL函数 DATEDIFF

    文章目录 第四十三章 SQL函数 DATEDIFF 大纲 参数 描述 Datepart 参数 日期表达式格式 Years 分数秒 时间差异与时间格式无关 范围和值检查 错误处理 示例 第四十三章 SQ ...

  3. 第七十三章 SQL函数 LCASE

    文章目录 第七十三章 SQL函数 LCASE 大纲 参数 描述 示例 第七十三章 SQL函数 LCASE 将字符串中的所有大写字母转换为小写字母的大小写转换函数. 大纲 LCASE(string-ex ...

  4. 第九十三章 SQL函数 LTRIM

    文章目录 第九十三章 SQL函数 LTRIM 大纲 参数 描述 示例 第九十三章 SQL函数 LTRIM 字符串函数,它返回一个删除了前导空格的字符串. 大纲 LTRIM(string-express ...

  5. 第六十七章 SQL函数 ISNUMERIC

    文章目录 第六十七章 SQL函数 ISNUMERIC 大纲 参数 描述 示例 第六十七章 SQL函数 ISNUMERIC 测试有效数字的数值函数. 大纲 ISNUMERIC(check-express ...

  6. 第六十一章 SQL函数 GREATEST

    文章目录 第六十一章 SQL函数 GREATEST 大纲 参数 描述 返回值数据类型 示例 第六十一章 SQL函数 GREATEST 从一系列表达式中返回最大值的函数. 大纲 GREATEST(exp ...

  7. 第六十六章 SQL函数 ISNULL

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

  8. 第四十六章 SQL函数 DAY

    文章目录 第四十六章 SQL函数 DAY 大纲 参数 描述 第四十六章 SQL函数 DAY 返回日期表达式的月份日期的日期函数. 大纲 DAY(date-expression){fn DAY(date ...

  9. 第十六章 SQL函数 ABS

    文章目录 第十六章 SQL函数 ABS 大纲 参数 描述 示例 第十六章 SQL函数 ABS 返回数值表达式的绝对值的数值函数. 大纲 ABS(numeric-expression){fn ABS(n ...

最新文章

  1. java 按格式输出时间_java格式输出时间
  2. Android笔记:Fragment与Activity之间的交互,onAttach,退出最后一个 fragment
  3. 加密货币与智能合约的隐私 (一): 区块链上的隐私
  4. php旋转数组找出最小的,LeetCode 153 寻找旋转排序数组中的最小值
  5. 特异性matlab,基于灰色理论计算位置特异性矩阵
  6. Linux 基础学习大考核
  7. Maven项目 之eclipse操作篇
  8. javascript --- DOM0级、DOM2级、跨浏览器 的事件处理程序
  9. AspNetCore 启动地址配置详解
  10. 算法总结之欧拉函数中国剩余定理
  11. 101次从入门到放弃,终于找到一个数据分析利器!
  12. Windows用户模式下的线程同步
  13. 终于把Redis场景设计搞清楚了,需要掌握的都在这了
  14. ELK(ElasticSearch+LogStash+Kibana)搭建
  15. 酒店计算机管理系统维护合同,酒店计算机管理系统维护合同协议书范本.pdf
  16. 【python nc文件】10分钟教你python读取nc文件
  17. 编译报错【error】dexpreopt.sh:23 exited with status 1
  18. 如何使用两台无线路由器进行无线桥接(互联)(转)
  19. python爬虫爬取网页图片存储本地_Python爬虫抓取糗百的图片,并存储在本地文件夹...
  20. 51Talk-Level 7 Unit 2 L4

热门文章

  1. 天气转凉除了衣服要多穿,知识也要多多积累啊 Java——TreeMap常用methods,还不赶紧收藏起来
  2. React-Native 实现安卓下载软件
  3. 如何让APP在Google Play中成为特色
  4. linux 查看CPU频率
  5. 文档查询匹配的方法:布尔模型,向量空间模型
  6. 几行代码实现base64和pdf/word的相互转换
  7. 2014-1-12遇到的英语单词
  8. 数据库学习之---第1章 数据库基础
  9. HDU 6641 TDL 异或性质
  10. jy-16-T-STORE——陈子枢总结