Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да препратите JSON ключове, които съдържат специални символи, когато използвате OPENJSON, JSON_QUERY и JSON_VALUE (SQL сървър)

Ако използвате T-SQL функция като OPENJSON() , JSON_QUERY() или JSON_VALUE() , може да се предпазите от всякакви небуквени и цифрови знаци, които може да са в JSON документа, с който работите. Особено ако тези специални знаци са в имената на ключовете и трябва да се позовавате на имената на тези ключове.

Например, можете да имате име на ключ, което съдържа интервал (като "first name" ) или знак за долар ($ ).

За щастие всеки път, когато препращате към такива ключове, можете просто да заградите името на ключа с двойни кавички.

Пример 1 – OPENJSON()

Ето пример за препращане към ключ с интервал в името му, когато използвате OPENJSON() .

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

Резултат:

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

Ето още един пример, този път имаме знак за долар в името на ключа.

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

Резултат:

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

Пример 2 – JSON_QUERY()

Ето пример за използване на JSON_QUERY() .

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

Резултат:

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

И ето го със знак за долар.

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

Резултат:

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

Пример 3 – JSON_VALUE()

Този пример използва 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"');

Резултат:

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

И ето го със знак за долар.

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

Резултат:

+---------------+
| 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. Как да се покаже дата във формат на дата в САЩ в SQL Server (T-SQL)

  2. SQL Server:Каква е разликата между CROSS JOIN и FULL OUTER JOIN?

  3. сравняване на колона със списък със стойности в t-sql

  4. Как правилно да вмъкнете нов ред в nvarchar

  5. Какви са основните разлики в производителността между varchar и nvarchar типовете данни на SQL Server?