sql >> Databáze >  >> RDS >> Mysql

JSON_UNQUOTE() – Odstranění nabídek z dokumentu JSON v MySQL

V MySQL je to JSON_UNQUOTE() funkce „zruší citace“ dokumentu JSON a vrátí výsledek jako utf8mb4 řetězec.

Jako argument poskytnete dokument JSON a funkce se postará o zbytek.

Syntaxe

Syntaxe vypadá takto:

JSON_UNQUOTE(json_val)

Kde json_val je dokument JSON, který chcete bez uvozovek.

Příklad

Zde je příklad k demonstraci.

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

Výsledek:

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

Escape Characters

Způsob, jakým tato funkce zpracovává znaky escape, závisí na tom, zda NO_BACKSLASH_ESCAPES je povoleno nebo zakázáno.

Když je NO_BACKSLASH_ESCAPES zakázáno

 NO_BACKSLASH_ESCAPES režim je ve výchozím nastavení v MySQL 8.0 zakázán.

Zde je to, co se stane, pokud zahrneme \t k určení znaku tabulátoru v řetězci, když NO_BACKSLASH_ESCAPES je zakázáno a bez pomocí JSON_UNQUOTE() .

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

Výsledek:

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

A co se stane, když použijeme JSON_UNQUOTE() :

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

Výsledek:

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

Můžeme to překonat použitím dvou zpětných lomítek (\\t ). Mějte však na paměti, že pokud to provedete, ne změní výsledek pomocí JSON_UNQUOTE() .

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

Výsledek:

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

Když je povoleno NO_BACKSLASH_ESCAPES

Co se stane, když povolíme NO_BACKSLASH_ESCAPES před spuštěním předchozího příkazu:

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

Výsledek:

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

A co se stane, když odstraníme první zpětné lomítko:

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

Výsledek:

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


  1. Jak získat aktuální datum (bez času) v T-SQL

  2. Neplatný identifikátor SQL

  3. T-SQL úterý #67:Nové zálohování a obnovení rozšířených událostí

  4. Předejte kontrolu na konkrétní řádek pomocí příkazu Goto Label v PLSQL