【问题标题】:Postgres SQL Single quote EscapePostgresql 单引号转义
【发布时间】:2015-05-27 17:16:26
【问题描述】:

我需要帮助在 postgresql 插入中转义单引号。我正在使用 ETL 工具从源中提取数据并加载到 postgresql 数据库中。Select 语句包含一些变量。

例如我的选择查询是

SELECT ${UNIVERSITY},date from education.

变量${UNIVERSITY} 的值为Duke's university。这个语句给了我一个错误

ERROR: syntax error at or near "s"

并且没有被加载到 postgres 表中。谁能帮我转义单引号以及我应该如何在变量中使用?

【问题讨论】:

  • this post 有帮助吗?
  • 您可以在 Postgres 中使用 '' 转义单引号。请参阅this SO article 了解更多信息。
  • 您是在执行 Pentaho Spoon 还是 Pentaho 报表设计器的查询?
  • 我正在执行 Pentaho 勺子的查询。
  • ${UNIVERSITY} 真的是指教育表中的列,还是只是您要添加到结果中的值?如果它不是表格列,我可以用勺子给你一个解决方案

标签: sql postgresql pentaho


【解决方案1】:

你可以做SELECT REPLACE(${UNIVERSITY},'''', ''''''),date from education. 但是您可能只需要执行SELECT '${UNIVERSITY}',date from education,因为您的查询如下所示:

SELECT Duke's university,date from education

SQL 语法肯定是错误的。

【讨论】:

  • 您能否解释一下这里使用多个引号。为什么我们在这里使用 ''''(4 个引号)。谢谢
  • REPLACE的语法是REPLACE(whatTochange,stringToFind,StringToChange);在大多数情况下,它看起来像 REPLACE('someetext','ee', 'e');所以,在这里你必须已经单引号了。现在你需要找到单引号'。逃脱它看起来像''。如果你把它放在单引号中,那么你已经有了 '''' 。下一步是将其更改为双引号。双引号是 '''' 如果你把它放在单引号上,那么你已经有 6 个单引号了:) 但正如我所说,检查第二个选项。
  • 您可以使用 postgres 提供的高级引用:select '''' 与 select $'$ 和 select e'\'' 相同...这比 oracle ''' 清楚得多'方式...
  • @VaoTsun 这不是 Oracle 方式。这是标准的ANSI方式。
  • @sidux 酷!我的口音是 - Postgres 允许你使用其他引用,很多人觉得更容易阅读:)
【解决方案2】:

由于您提到它并没有引用表教育中的列。您可以通过此转换实现相同的预期输出。


- Table input 步骤中,您可以编写查询 SELECT date from education
- 在 split fields 步骤中,您可以在结果中添加一个新列 University
- 在Get Variables 步骤中,您可以将参数值分配给新列大学
- 在Select Values 步骤中获取结果

【讨论】:

    【解决方案3】:

    @Marlon Abeykoon 的回答非常好。你也可以这样做。

    将其放入作业中,并在其中设置一个名为 UNIVERSITY 的参数或变量,并为其赋予“杜克大学”值。从那里启动上述转换。选择始终为真的连接条件。我使用了'yr_key IS NOT NULL'。结果如下:

    然后您可以将结果运行到 Table Output 步骤中以加载到 PostgreSQL。

    【讨论】:

      猜你喜欢
      • 2014-07-28
      • 2016-12-30
      • 1970-01-01
      • 1970-01-01
      • 2016-12-06
      • 1970-01-01
      • 1970-01-01
      • 2017-01-08
      相关资源
      最近更新 更多