【问题标题】:Teradata remove enclosing single quotes from variableTeradata 从变量中删除封闭的单引号
【发布时间】:2017-10-15 16:16:56
【问题描述】:

我需要替换一串数字中的单引号并在 WHERE IN 子句中使用。例如,我有

WHERE Group_ID IN (''4532','3422','1289'')

括号内的标准是作为参数传递的,所以我无法控制它。我尝试使用:

WHERE Group_ID IN (REGEXP_REPLACE(''4532','3422','1289'', '[']', ' ',1,0,i))

也尝试使用 OReplace

WHERE Group_ID IN (OReplace(''4532','3422','1289'', '[']', ' '))

但得到同样的错误:

[Teradata Database] [3707] Syntax error, expected something like ',' 
    between a string or a Unicode character literal and the integer '4532'.

请建议如何删除单引号,甚至删除所有单引号也可以。

【问题讨论】:

    标签: teradata quotes


    【解决方案1】:

    您使用的字符串''4532','3422','1289'' 不正确,因为它包含非转义单引号。这是 SQL 中的语法错误。在这种特殊形式下,无论你用什么函数来修复它,或者你使用什么RDBMS,都会导致标准SQL出错。

    SQL 中的函数无法修复语法错误。 REGEXP_REPLACE 和 OReplace 永远不会被执行,因为查询永远不会进入执行状态。它永远不会通过 SQL 语法解析器。

    要从 SQL 解析器的角度查看错误,您可以将字符串分成多个部分

    1. '' -- SQL Parser 认为这是一个开始和结束的引号,因此是一个空字符串
    2. 4532 -- 现在 SQL 解析器显示为整数值
    3. ',' -- 现在这是一对包含单个逗号的引号
    4. 3422 -- 又是一个整数
    5. ',' -- 又是一个逗号
    6. 1289 -- 还是整数
    7. '' -- 又是一个空字符串

    这种字符串和数字的组合对 SQL 解析器没有任何意义,并且会导致错误。

    修复

    解决方法是正确转义数据。必须使用前面的另一个单引号对单引号进行转义。所以在这种情况下正确的字符串变成'''4532'',''3422'',''1289'''


    另一件事是OReplace 的用法(一旦语法固定)就像OReplace(yourStringValueHere, '''', ' ')) 在这里观察转义单引号的用法。两个外部引号用于字符串开始和结束。第一个内引号是转义字符,第二个内引号是传递给函数的实际数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-03
      • 2022-07-03
      • 2010-12-29
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      • 2013-08-16
      • 2021-05-29
      相关资源
      最近更新 更多