SQL Server:返回具有特定模式的列值

时间:2019-02-01 06:40:14

标签: sql json sql-server sql-server-2014

我正在尝试在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表中使用正则表达式。

请给我一些有关如何完成它的想法。

2 个答案:

答案 0 :(得分:1)

您正在使用哪个SQL引擎? (SQL Server,PGSQL或MySql等)

通常,您可以使用字符串函数查找位置,然后提取数据。

对于SQL Server,CHARINDEXSUBSTRING应该可以解决您的问题,在下面的示例中,我采用了硬编码的字符串,但是您可以将其替换为列名。

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

Live demo