Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak odwoływać się do kluczy JSON zawierających znaki specjalne podczas korzystania z OPENJSON, JSON_QUERY i JSON_VALUE (SQL Server)

Jeśli używasz funkcji T-SQL, takiej jak OPENJSON() , JSON_QUERY() lub JSON_VALUE() , możesz uważać na wszelkie znaki niealfanumeryczne, które mogą znajdować się w dokumencie JSON, z którym pracujesz. Zwłaszcza jeśli te znaki specjalne znajdują się w nazwach klawiszy i musisz się do nich odwoływać.

Na przykład możesz mieć nazwę klucza zawierającą spację (np. "first name" ) lub znak dolara ($ ).

Na szczęście za każdym razem, gdy odwołujesz się do takich klawiszy, możesz po prostu otoczyć nazwę klawisza podwójnymi cudzysłowami.

Przykład 1 – OPENJSON()

Oto przykład odwoływania się do klucza ze spacją w jego nazwie przy użyciu OPENJSON() .

DECLARE @json NVARCHAR(4000) = N'{
        "contact details" : {
            "client id" : 1, 
            "work phone" : "+61 987 902 029"
        }
    }';
SELECT * FROM OPENJSON(@json, '$."contact details"');

Wynik:

+------------+-----------------+--------+
| key        | value           | type   |
|------------+-----------------+--------|
| client id  | 1               | 2      |
| work phone | +61 987 902 029 | 1      |
+------------+-----------------+--------+

Oto kolejny przykład, tym razem mamy znak dolara w nazwie klucza.

DECLARE @json NVARCHAR(4000) = N'{
        "$ per hour" : {
            "normal rate" : 80, 
            "overtime" : 160 
        }
    }';
SELECT * FROM OPENJSON(@json, '$."$ per hour"');

Wynik:

+-------------+---------+--------+
| key         | value   | type   |
|-------------+---------+--------|
| normal rate | 80      | 2      |
| overtime    | 160     | 2      |
+-------------+---------+--------+

Przykład 2 – JSON_QUERY()

Oto przykład użycia JSON_QUERY() .

DECLARE @json NVARCHAR(4000) = N'{
        "contact details" : {
            "client id" : 1, 
            "work phone" : "+61 987 902 029"
        }
    }';
SELECT JSON_QUERY(@json, '$."contact details"');

Wynik:

+--------------------+
| (No column name)   |
|--------------------|
| {
            "client id" : 1, 
            "work phone" : "+61 987 902 029"
        }                    |
+--------------------+

A tutaj jest ze znakiem dolara.

DECLARE @json NVARCHAR(4000) = N'{
        "$ per hour" : {
            "normal rate" : 80, 
            "overtime" : 160 
        }
    }';
SELECT JSON_QUERY(@json, '$."$ per hour"');

Wynik:

+--------------------+
| (No column name)   |
|--------------------|
| {
            "normal rate" : 80, 
            "overtime" : 160 
        }                    |
+--------------------+

Przykład 3 – JSON_VALUE()

W tym przykładzie użyto JSON_VALUE() .

DECLARE @json NVARCHAR(4000) = N'{
        "contact details" : {
            "client id" : 1, 
            "work phone" : "+61 987 902 029"
        }
    }';
SELECT JSON_VALUE(@json, '$."contact details"."work phone"');

Wynik:

+--------------------+
| (No column name)   |
|--------------------|
| +61 987 902 029    |
+--------------------+

A tutaj jest ze znakiem dolara.

DECLARE @json NVARCHAR(4000) = N'{
        "$ per hour" : {
            "normal rate" : 80, 
            "overtime" : 160 
        }
    }';
SELECT JSON_VALUE(@json, '$."$ per hour"."normal rate"') AS [Normal Rate];

Wynik:

+---------------+
| Normal Rate   |
|---------------|
| 80            |
+---------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przełączanie partycji tabel w programie SQL Server:przewodnik

  2. Dowiedz się, czy tabela jest partycjonowana w SQL Server (T-SQL)

  3. Konwertuj „datetime2” na „date” w SQL Server (przykłady T-SQL)

  4. UNIX_TIMESTAMP w SQL Server

  5. CAST(DATETIME AS DATE) przez klauzulę WHERE