繁体   English   中英

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

[英]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, CHARINDEXSUBSTRING应该可以解决您的问题,在下面的示例中,我采用了硬编码的字符串,但是您可以将其替换为列名。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM