REDSHIFTテーブルの列に挿入する必要がある単一引用符を含む文字列値がたくさんあります。両方を使用しました/'
および''
INSERTステートメントの単一引用符をエスケープします。
例えば.
INSERT INTO table_Temp
VALUES ('1234', 'O\'Niel'), ('3456', 'O\'Brien')
私も\ 'の代わりに' 'を使用しましたが、「VALUESリストは同じ長さでなければなりません」、つまり各レコードの引数が2より大きいというエラーが繰り返し表示されます。
この問題を解決する方法を教えてください。
SQLの標準は二重の単一引用符です。
INSERT INTO table_Temp (col1, col2) -- include the column names
VALUES ('1234', 'O''Niel'), ('3456', 'O''Brien');
挿入する値に対応する列名も含める必要があります。それがおそらく2番目のエラーの原因です。
お使いの環境にもよると思います。 Periscope Dataのredshift SQLエディターを使用しており、\
はエスケープ文字として機能しました。 ''
および\\
動作しませんでした。
私は同様の問題に直面していました、それをクエリにデコードするために一種のJSON構造を送信する必要がありましたが、文字列を受信するプログラムがあり、このプログラムがエスケープをエスケープしていたため、クエリが失敗し、最終的にこれを見つけました:- $$をPostgreSQLのドル引用符付き文字列に入れます quote_literal(42.5)に言及 https://www.postgresql.org/docs/current/functions-string.html#FUNCTIONS-STRING-OTHER これで私の問題は解決します。文字列の例は
'LocalTime = {US/Central}; NumDays = {1}; NumRows = {3}; F_ID = {[アップル、オレンジ、バナナ]} '
Select
Param, value , replace(quote_literal(replace(replace(Value,'[',''),']','')),',',quote_literal(',')) ValueList
FROM (
select
SPLIT_PART(split,'=',1) as Param,
replace( replace(SPLIT_PART(split,'=',2),'{',''),'}','') as Value
FROM
(
select
trim(split_part(freeform.txt, ';', number.n)) as split
from
( select
'LocalTime={US/Central}; NumDays={1}; NumRows={3}; F_ID={[Apple, Orange, Bannana]}' as txt
) freeform,
( select 1 as n union all
select 2 union all
select 3 union all
select 4 union all
select 5 union all
select 6 union all
select 7 union all
select 8 union all
select 9 union all
select 10
) number
where split <> ''
) as MY_TMP
) as valuePart
使用する \\'
脱出する '
s = s.replace("'", "\\'")