在REDSHIFT SQL中如何转义单引号

11

我有许多包含单引号的字符串值,我需要将它们插入到REDSHIFT表的一列中。 我在INSERT语句中使用了/'''来转义单引号。

例如:

INSERT INTO table_Temp
    VALUES ('1234', 'O\'Niel'), ('3456', 'O\'Brien')

我也尝试使用双引号代替单引号,但是它一直给我错误提示:"VALUES list must of same length",也就是说每个记录的参数个数必须相同且大于2。

你能告诉我如何解决这个问题吗?

6个回答

21

在SQL中的标准是双单引号:

INSERT INTO table_Temp (col1, col2)  -- include the column names
    VALUES ('1234', 'O''Niel'), ('3456', 'O''Brien');

你还应该包含与插入值对应的列名,这可能是你第二个错误的原因。


2
这个表只有两列,都是VAR CHAR类型的。我已经尝试过使用双引号和单引号了,但还是不起作用。 - stack_pointer is EXTINCT
@stack_pointerisEXTINCT . . . 这很奇怪。你确定使用的是“简单”的单引号而不是一些花哨的字符吗? - Gordon Linoff
我注意到一个不同的问题,因为名称中使用了逗号,并且它是一个CSV文件。 - stack_pointer is EXTINCT

1
你可以使用CHR(39)并连接字符串。你的名字会像下面这样:
  ('O' || CHR(39)||'Brian')

0

我认为这可能取决于您的环境。我正在使用Periscope Data的Redshift SQL编辑器,\作为转义字符有效。 ''\\无效。


0

双单引号在我的用例中起作用了


你的答案可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是否正确。您可以在 帮助中心 找到关于如何撰写良好答案的更多信息。 - Community

0

我曾经遇到过类似的问题,我需要发送一种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={[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

-3

使用 \\' 转义 '

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

3
这不是你可以在Redshift中做到的。 - szeitlin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接