Экранирование одинарных кавычек в 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, и \ работал как спасательный персонаж. '' а также \\ не работал.

Использование \\' Сбежать '

s = s.replace("'", "\\'"),

Вы можете использовать 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
Другие вопросы по тегам