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

JSON_UNQUOTE() – Премахване на цитати от JSON документ в MySQL

В MySQL, JSON_UNQUOTE() функцията „отменя кавички“ JSON документ и връща резултата като utf8mb4 низ.

Вие предоставяте JSON документа като аргумент, а функцията ще направи останалото.

Синтаксис

Синтаксисът е така:

JSON_UNQUOTE(json_val)

Където json_val е JSON документът, който не искате да цитирате.

Пример

Ето пример за демонстрация.

SET @data = '"Homer Simpson"';
SELECT 
  @data Original, 
  JSON_UNQUOTE(@data) Unquoted;

Резултат:

+-----------------+---------------+
| Original        | Unquoted      |
+-----------------+---------------+
| "Homer Simpson" | Homer Simpson |
+-----------------+---------------+

Escape символи

Начинът, по който тази функция обработва escape знаците зависи от това дали NO_BACKSLASH_ESCAPES е активирана или деактивирана.

Когато NO_BACKSLASH_ESCAPES е деактивиран

 NO_BACKSLASH_ESCAPES режимът е деактивиран по подразбиране в MySQL 8.0.

Ето какво се случва, ако включим \t за да посочите табулатор в низ, когато NO_BACKSLASH_ESCAPES е деактивиран и без използвайки JSON_UNQUOTE() .

SET @data = '"Homer \t Simpson"';
SELECT 
  @data Original;

Резултат:

+-------------------+
| Original          |
+-------------------+
| "Homer 	 Simpson" |
+-------------------+

И ето какво се случва, ако използваме JSON_UNQUOTE() :

SET @data = '"Homer \t Simpson"';
SELECT JSON_UNQUOTE(@data) Unquoted;

Резултат:

ERROR 3141 (22032): Invalid JSON text in argument 1 to function json_unquote: "Invalid escape character in string." at position 7.

Можем да преодолеем това, като използваме две обратни наклонени черти (\\t ). Имайте предвид обаче, че това ще промени резултата, когато не използвайки JSON_UNQUOTE() .

SET @data = '"Homer \\t Simpson"';
SELECT 
  @data Original, 
  JSON_UNQUOTE(@data) Unquoted;

Резултат:

+--------------------+-----------------+
| Original           | Unquoted        |
+--------------------+-----------------+
| "Homer \t Simpson" | Homer 	 Simpson |
+--------------------+-----------------+

Когато NO_BACKSLASH_ESCAPES е активиран

Ето какво се случва, когато активираме NO_BACKSLASH_ESCAPES преди да изпълните предишния оператор:

SET @@sql_mode = 'NO_BACKSLASH_ESCAPES';
SET @data = '"Homer \\t Simpson"';
SELECT 
  @data Original, 
  JSON_UNQUOTE(@data) Unquoted;

Резултат:

+---------------------+------------------+
| Original            | Unquoted         |
+---------------------+------------------+
| "Homer \\t Simpson" | Homer \t Simpson |
+---------------------+------------------+

И ето какво се случва, ако премахнем първата обратна наклонена черта:

SET @@sql_mode = 'NO_BACKSLASH_ESCAPES';
SET @data = '"Homer \t Simpson"';
SELECT 
  @data Original, 
  JSON_UNQUOTE(@data) Unquoted;

Резултат:

+--------------------+-----------------+
| Original           | Unquoted        |
+--------------------+-----------------+
| "Homer \t Simpson" | Homer 	 Simpson |
+--------------------+-----------------+


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Копирайте данните в нова таблица в MySQL

  2. CHAR() Примери в MySQL

  3. Отстраняване на неизправности Грешка с незаконен микс от съпоставяне в mysql

  4. Мога ли да параметризирам името на таблицата в подготвено изявление?

  5. CREATE TABLE MySQL срещу T-SQL с примери за синтаксис