[英]SQL Server : return column values with specific pattern
我正在尝试在SQL中做一些非常酷的事情,如下表
表名: details
Id Content
---------------------------------------------------------------------------
X345 {"Primary":["Aadhaar"],"Secondary":["Driving License","Others"]}
X346 {"Primary":["Voter ID"],"Secondary":["Driving License","Others"]}
我想从Content
列中单独提取主要详细信息,即第一个["_____"]
之间的值。 有什么办法吗?
像这样:
Aadhaar
Voter ID
我不知道如何在此SQL Server表中使用正则表达式。
请给我一些有关如何完成它的想法。
您正在使用哪个SQL引擎? (SQL Server,PGSQL或MySql等)
通常,您可以使用字符串函数查找位置,然后提取数据。
对于SQL Server, CHARINDEX
和SUBSTRING
应该可以解决您的问题,在下面的示例中,我采用了硬编码的字符串,但是您可以将其替换为列名。
SELECT substring('{"Primary":["Aadhaar"],"Secondary":["Driving License","Others"]}' ,CHARINDEX('["Aadhaar"]', '{"Primary":["Aadhaar"],"Secondary":["Driving License","Others"]}'),14) AS Aadhar;
这是SQL Server 2014中的实现:
-- This temp table is only for testing purposes:
DECLARE @T TABLE
(
Id int,
Content varchar(max)
)
INSERT INTO @T Values
(1,'{"Primary":["Aadhaar"],"Secondary":["Driving License","Others"]}'),
(2,'{"Primary":["Voter ID"],"Secondary":["Driving License","Others"]}'),
(3,'{"Primary":["A Much Longer Testing Case"],"Secondary":["Driving License","Others"]}')
SELECT LEFT(SUBSTRING(Content,14,LEN(Content)),CHARINDEX('"', SUBSTRING(Content,14,LEN(Content))) - 1)
FROM @T
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.