sql >> データベース >  >> RDS >> Mysql

JSON_UNQUOTE()–MySQLのJSONドキュメントから引用符を削除します

    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 |
    +-----------------+---------------+
    

    エスケープ文字

    この関数がエスケープ文字を処理する方法は、NO_BACKSLASH_ESCAPESかどうかによって異なります。 有効または無効です。

    NO_BACKSLASH_ESCAPESが無効になっている場合

    NO_BACKSLASH_ESCAPES MySQL8.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.
    

    これは、2つの円記号(\\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. android.database.sqlite.SQLiteCantOpenDatabaseException:不明なエラー(コード14):データベースを開くことができませんでした

    2. 2つのMySQLテーブルをマージするにはどうすればよいですか?

    3. 科学的記数法なしでSQLServerでfloatをvarcharに変換する

    4. ORDBMSの「O」:PostgreSQLの継承