2017-09-07 1 views
-1

Une seule cellule contient une chaîne comme ce qui suit:Substring SQL Select

[{"Code":"C015","Index":0,"Message":"blah blah blah","FailSeverity":2},{"Code":"W012","Index":0,"Message":"blah blah blah","FailSeverity":1}] 

Je suis intéressé à tirer sur tous les codes de la chaîne unique ci-dessus. C'EST À DIRE. Je veux le "C015" et "W012" de l'exemple ci-dessus et rien d'autre.

J'ai vu la fonction Substring() mais je ne suis pas très sûr de la façon de l'implémenter dans ce scénario ou que je comprenne parfaitement en tant que fonction.

+0

Quel est votre SGBD? En fonction de cela, il existe différentes fonctions intégrées pour traiter cela comme json au lieu de déblayer avec des sous-chaînes. – Filburt

+0

Le SGBD que nous utilisons est SQL Server Management Studio 2014 –

+1

Management Studio ** N'EST PAS UN SGBD !! ** C'est juste un outil de requête et de schéma, et il peut se connecter à de nombreuses versions et éditions de Sql Server ou même de Bases de données SQL Server. –

Répondre

0

Pour quelque chose comme ça, je pense que vous voulez utiliser une bonne fonction de répartiteur de chaîne basée sur les compteurs. Dans ce cas, je suis sur le DelimitedSplit8K

DECLARE @String VARCHAR(8000) = '[{"Code":"C015","Index":0,"Message":"blah blah blah","FailSeverity":2},{"Code":"W012","Index":0,"Message":"blah blah blah","FailSeverity":1}]'; 

WITH 
    cte_GetCodes AS (
    SELECT 
     CodeValue = CASE WHEN LAG(dsk.Item, 2) OVER (ORDER BY dsk.ItemNumber) = 'Code' THEN dsk.Item END 
    FROM 
     dbo.DelimitedSplit8K(@String, '"') dsk 
    ) 
SELECT 
    * 
FROM 
    cte_GetCodes gc 
WHERE 
    gc.CodeValue IS NOT NULL; 

Jeff Moden Résultats ...

CodeValue 
---------- 
C015 
W012 
+0

Je pense que je n'étais pas très clair avec ce que je demandais. Je suis à la recherche de la cellule qui contient ces messages de toute façon, donc je cherche à le chercher et supprimer toutes les données supplémentaires dans une seule requête si cela a du sens? –

+0

@ChaseWhitehead SQL Server n'a pas de "cellules" donc non ... Toujours pas de sens. Si vous voulez avoir du sens, commencez par mettre à jour votre message avec des données de test réelles et montrez le résultat exact que vous recherchez en fonction des données de test fournies. –