2017-05-03 4 views
-2

Wie Sie einen Wert der Spalte erhalten, die mit Nummer beginnt. Beispiel:SQL get JSOn Zeichenfolge Wert Spalte beginnt mit Nummer

DECLARE @Text NVARCHAR(MAX) = '{  "1Property1" :"shiva",  "Property2" :"here ",  "metadata-department": "A",  "metadata-group": "B" }'; 

hier Eigenschaftsname beginnt mit der Nummer 1.

ich eine Lösung brauchen Wert zu erhalten in SQL Server

Antwort

0

eine Kopie delimitedSplit8K und Sie können dies tun:

DECLARE @Text NVARCHAR(MAX) = '{  "1Property1" :"shiva",  "Property2" :"here ",  "metadata-department": "A",  "metadata-group": "B" }'; 

SELECT Item 
FROM dbo.DelimitedSplit8K(@Text, '"') 
WHERE Item LIKE '[0-9][a-zA-Z]%'; 

Ergebnisse:

Item 
----------- 
1Property1 

QUICK UPDATE AUF IHRER ANTWORT AUF BASIS:

Ich habe keinen SQL 2016-Box im Moment haben, so kann ich nicht JSON_VALUE verwenden. Hier ist die Microsoft-Seite, die Ihnen dabei helfen wird: JSON Data (SQL Server). Im Folgenden finden Sie eine gute Lösung vor SQL 2016 alle Spaltennamen und zugehörige Felder zu erhalten:

DECLARE @Text NVARCHAR(MAX) = 
    '{  "1Property1" :"shiva",  "Property2" :"here ",  "metadata-department": "A",  "metadata-group": "B" }'; 

WITH 
split1 AS 
(
    SELECT Item = REPLACE(REPLACE(Item, '}', ''), '"', '') 
    FROM dbo.DelimitedSplit8K_2012(SUBSTRING(@Text, CHARINDEX('"', @Text), 10000), ',') 
), 
split2 AS 
(
    SELECT 
    s1.Item, 
    ColName = MAX(CASE ItemNumber WHEN 1 THEN s2.item END), 
    ColVal = MAX(CASE ItemNumber WHEN 2 THEN s2.item END) 
    FROM split1 s1 
    CROSS APPLY dbo.DelimitedSplit8K_2012(s1.Item, ':') s2 
    GROUP BY s1.Item 
) 
SELECT 
    ColName = LTRIM(RTRIM(ColName)), 
    ColVal = LTRIM(RTRIM(colVal)) 
FROM split2; 

Ergebnisse:

ColName    ColVal 
-------------------- ------ 
metadata-department A 
metadata-group  B 
Property2   here 
1Property1   shiva 

Um nur die, wo „Spalt“ würden Sie mit einer Zahl beginnen umfassen:

WHERE colname LIKE '[0-9]%'; 
+0

müssen Daten mit JSON_VALUE extrahieren, nicht nur den Spaltennamen bekommen – shiva

+0

@sheva - Ich aktualisierte meine Antwort ... –

+0

Danke. Das funktioniert, aber ich habe versucht, die JSON_Value-Funktion zu verwenden. Ich habe mich bemüht, eine Lösung zu finden, wenn der Name mit der Nummer im Name-Value-Paar von JSON beginnt. Die Umgehung, die ich getan habe, ist, an alle Namen eine Zeichenfolge anzuhängen, die mit Numbers beginnt, und dann den JSON-Parser von SQL zu verwenden. Es half mir, das Problem zu lösen – shiva

0

, wenn Sie SQL Server 2016 verwenden Sie einfach haben:

SELECT Value 
FROM OPENJSON(@Text) 
WHERE [Key] = '1Property1' 
+0

Basierend auf der OP-Anforderung würde die WHERE-Klausel sein: WO [Schlüssel] Wie '[0-9]%' –

+0

Danke, es war nützlich. – shiva

Verwandte Themen