前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL谓词 IS JSON

SQL谓词 IS JSON

作者头像
用户7741497
发布2022-05-09 15:34:40
3550
发布2022-05-09 15:34:40
举报
文章被收录于专栏:hml_知识记录

SQL谓词 IS JSON

确定数据值是否为JSON格式。

注意:IRIS版本可用。其他不行。

大纲

代码语言:javascript
复制
scalar-expression IS [NOT] JSON [keyword]

参数

  • scalar-expression - 正在检查JSON格式的标量表达式。
  • keyword - 可选—可选值、标量、数组或对象。 默认为VALUE

描述

IS JSON谓词确定数据值是否为JSON格式。 下面的示例确定谓词是否是格式化正确的JSON字符串,是JSON对象还是JSON数组:

代码语言:javascript
复制
ClassMethod IsJson()
{
    s q1 = "SELECT TOP 5 Name FROM Sample.Person "
    s q2 = "WHERE '{""name"":""Fred"",""spouse"":""Wilma""}' IS JSON"
    s myquery = q1_q2
    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()
}

IS JSON(带或不带可选关键字VALUE)对任何JSON数组或JSON对象返回true。 这包括一个空JSON数组'[]'或一个空JSON对象'{}'

关键字VALUE和关键字SCALAR是同义词。

对于JSON数组oref返回true。 对于JSON对象oref, IS JSON对象返回true。 下面的例子说明了这一点:

代码语言:javascript
复制
ClassMethod IsJson1()
{
    s jarray=[1,2,3,5,8,13,21,34]
    w "JSON array: ",jarray,!
    s myquery = "SELECT TOP 5 Name FROM Sample.Person WHERE ? IS JSON ARRAY"
    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(jarray)
    d rset.%Display()
}
代码语言:javascript
复制
ClassMethod IsJson2()
{
    s jarray=[1,2,3,5,8,13,21,34]
    w "JSON array: ",jarray,!
    s myquery = "SELECT TOP 5 Name FROM Sample.Person WHERE ? IS JSON OBJECT"
    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(jarray)
    d rset.%Display()
}
代码语言:javascript
复制
ClassMethod IsJson3()
{
    s jobj={"name":"Fred","spouse":"Wilma"}
    w "JSON object: ",jobj,!
    s myquery = "SELECT TOP 5 Name FROM Sample.Person WHERE ? IS JSON OBJECT"
    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(jobj)
    d rset.%Display()
}

IS NOT JSON谓词是少数几个可以在WHERE子句中用于流字段的谓词之一。 它的行为与is NOT NULL相同。 如下面的例子所示:

代码语言:javascript
复制
ClassMethod IsJson4()
{
    s q1 = "SELECT Title,%OBJECT(Picture) AS PhotoOref FROM Sample.Employee "
    s q2 = "WHERE Picture IS NOT JSON"
    s myquery = q1_q2
    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()
}

IS JSON可以在任何可以指定谓词条件的地方使用,如本手册的谓词概述页面所述。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SQL谓词 IS JSON
  • 大纲
  • 参数
  • 描述
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档