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]%';
müssen Daten mit JSON_VALUE extrahieren, nicht nur den Spaltennamen bekommen – shiva
@sheva - Ich aktualisierte meine Antwort ... –
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