我正在尝试在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表中使用正则表达式。
请给我一些有关如何完成它的想法。
答案 0 :(得分:1)
您正在使用哪个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;
答案 1 :(得分:1)
这是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