如何从SQL Server的nvarchar类型字段中提取唯一值?
解决SQL Server中JSON数组字段提取唯一值的问题
嗨,刚接触SQL Server遇到这种JSON数组的拆分需求很正常,别着急!你现在的字段存储的是JSON格式的数组,直接用DISTINCT只会对整个数组字符串去重,而没法拆分出里面的单个元素,所以得先把数组“展开”成单独的行,再做去重操作。
具体解决方案
SQL Server 2016及以后的版本提供了专门的JSON处理函数OPENJSON(),可以轻松解析JSON数组并拆分成多行。结合CROSS APPLY和DISTINCT就能实现你的需求:
假设你的表名为YourTableName,存储JSON数组的字段名为YourJsonColumn,执行以下SQL语句即可:
SELECT DISTINCT value AS UniqueValue FROM YourTableName CROSS APPLY OPENJSON(YourJsonColumn) ORDER BY UniqueValue;
代码解释
OPENJSON(YourJsonColumn):将每个行中的JSON数组解析为多行结果集,其中默认的value列就是数组中的单个元素CROSS APPLY:把原表的每一行和对应的数组拆分结果关联起来,相当于把每个数组“展开”成独立的行DISTINCT:对展开后的单个元素进行去重,得到所有唯一值ORDER BY:让最终结果按字母顺序排列,和你期望的输出格式一致
验证效果
用你给出的测试数据执行上述语句,会得到完全符合预期的结果:
UniqueValue ----------- value1 value2 value3 value4 value5 value6 value7
注意事项
- 这个方案要求你的SQL Server版本是2016或更高,并且数据库兼容级别至少设置为130(可以通过
ALTER DATABASE YourDatabase SET COMPATIBILITY_LEVEL = 130;调整) - 如果你的SQL Server版本低于2016,需要用字符串拆分的方式处理,但这种方法容易出错(比如处理数组里的逗号、引号等),优先建议升级版本或使用官方的JSON函数
内容的提问来源于stack exchange,提问作者Happy Coder
相关产品推荐
相关产品推荐

