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

json配列をテキスト配列にキャストする方法は?

    json_array_elementsの代わりにjson_array_elements_textを試してください 、テキストへの明示的なキャストは必要ありません(x::text )、使用できるように:

    CREATE or replace FUNCTION json_array_castext(json) RETURNS text[] AS $f$
        SELECT array_agg(x) FROM json_array_elements_text($1) t(x);
    $f$ LANGUAGE sql IMMUTABLE;
    

    追加の質問について

    x ::textがキャストではないのはなぜですか?

    これはキャストされ、このためエラーは発生しませんが、json文字列を次のようなテキストにキャストする場合:::text 、postgresは値に引用符を追加します。

    テストの目的で、関数を元の関数に再度変更して(質問にあるように)、次のことを試してみましょう。

    SELECT  
    (json_array_castext('["hello","world"]'))[1] = 'hello',
    (json_array_castext('["hello","world"]'))[1],
    'hello'
    

    ご覧のとおり、(json_array_castext('["hello","world"]'))[1] "hello"を与えます helloの代わりに 。これがfalseを取得した理由です それらの値を比較するとき。



    1. 拡張イベントを使用して実行プランの警告をキャプチャする

    2. OracleのREGEXP_SUBSTR()関数

    3. ResultSetを返す

    4. SQLSELECTAND演算子