微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

未命名值时将json值检索到列中

如何解决未命名值时将json值检索到列中

我在表中有一个名为Username的列(varchar max,允许为空)。该表可能具有多个条目,这些条目全部存储在此列中。当前以以下格式显示

[“ name1”,“ name2”]

我正在尝试将name1和name2拉到单独的行中。我不知道该怎么做。这是我当前拥有的最接近的查询

select u.id,a.[Username]
from dbo.Users u
CROSS APPLY OPEnjsON(Username) WITH ([Username] varchar(max)) a

这正确地将它们拉出行,但是行显示NULL而不是值。我检查了名称是否与语法中的列名称匹配,并且确实如此。

解决方法

OPENJSON函数正在查找名为“用户名”的列。相反,请尝试为OPENJSON'oj'指定别名,并在不指定架构的情况下打开JSON。然后将oj.value添加到SELECT列表中。像这样

select u.id,oj.[value] as Username
from dbo.Users u
     cross apply openjson(u.Username) oj;
,

documentation中解释了导致意外结果的原因:“ ...... OPENJSON将jsonExpression中的键与with_clause中的列名进行匹配(在这种情况下,matches键表示它区分大小写)。如果列名与键名不匹配,则可以提供可选的column_path ...“ 。您输入的JSON是标量值的数组,并且没有键"username"

但是,您可以OPENJSON()与显式架构(WITH子句)一起使用。只需使用正确的路径(您的情况下为'$')即可。

表格:

CREATE TABLE Users (id int,username varchar(max))
INSERT INTO Users (id,username) VALUES (1,'["name1","name2"]')

声明:

SELECT u.id,a.[username]
FROM Users u
CROSS APPLY OPENJSON (u.[username]) WITH ([username] varchar(max) '$') a

结果:

id  username
1   name1
1   name2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?