Экранирование одинарных кавычек в REDSHIFT SQL
У меня есть много строковых значений, содержащих одинарные кавычки, которые мне нужно вставить в столбец таблицы REDSHIFT. Я использовал оба "/" и "", чтобы избежать одинарных кавычек в операторе INSERT.
например, INSERT INTO table_Temp VALUES ('1234', 'O\'Niel'), ('3456', 'O\'Brien') Я также использовал '' вместо \ ', но он продолжает выдавать ошибку, что "список VALUES должен одинаковой длины "т.е. нет: аргументов для каждой записи>2.
Можете ли вы сообщить, как решить эту проблему?
6 ответов
Стандарт в SQL - двойные одинарные кавычки:
INSERT INTO table_Temp (col1, col2) -- include the column names
VALUES ('1234', 'O''Niel'), ('3456', 'O''Brien');
Вы должны также включить имена столбцов, соответствующие вставляемым значениям. Это, вероятно, причина вашей второй ошибки.
Я думаю, что это может зависеть от вашей среды. Я использую редактор SQL Reddsift от Periscope Data, и \
работал как спасательный персонаж. ''
а также \\
не работал.
Вы можете использовать CHR(39) и объединить строки. Ваше имя будет выглядеть так:
('O' || CHR(39)||'Brian')
двойные одинарные кавычки работали в моем случае использования
Я столкнулся с подобной проблемой, мне нужно было отправить некую структуру JSON, чтобы затем декодировать ее в мой запрос, но была программа, получающая мою строку, и эта программа избегала моих выходов, так что запрос не удался, в конце концов я нашел это: Put $ Строка в долларах в кавычках в PostgreSQL с упоминанием quote_literal (42.5) https://www.postgresql.org/docs/current/functions-string.html Это решает мою проблему. Пример строки
"LocalTime={US/Central}; NUMDAYS ={1}; NumRows={3}; F_ID={[Apple, Orange, Bannana]}'
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