【问题标题】:Postgres, query error: ERROR: operator does not exist: character varying = bigint?Postgres,查询错误:错误:运算符不存在:字符变化= bigint?
【发布时间】:2020-08-20 21:27:49
【问题描述】:

我正在尝试运行此查询:

select *
from my_table
where column_one=${myValue}

我在 Datagrip 中收到以下错误:

[42883] ERROR: operator does not exist: character varying = bigint Hint: No operator matches the given name and argument types. You might need to add explicit type casts.

现在,我找到了这个question,我可以通过输入这样的字符串来修复错误:

select *
from my_table
where column_one='123'

我需要的是一种将“123”作为参数传递的方法。我通常这样做${myValue} 并且它有效,但我不确定如何将我的变量作为输入保存在那里,以便我可以在代码中运行动态查询并让 Postgres 了解我想传入一个字符串而不是数字。

有什么建议吗?

这是我如何将参数值放入 DataGrip 的屏幕截图...:

好的,所以,我只是尝试在 myValue @thirumal 的答案工作的数据手柄参数输入字段中加上引号。我不知道我必须引用它的价值才能工作。 这是它的样子:

【问题讨论】:

  • 但是如何绑定myValue 参数?你能告诉我们你是如何执行查询的吗?
  • ${myValue}::varchar
  • 您使用的是哪种编程语言和数据库接口?正如 Marc 已经提到的:运行该语句并传递参数的代码很重要
  • 我正在使用 JetBrains 的 Datagrip。如图所示,我从字面上粘贴了查询,然后在弹出的参数中设置了值。 (附上截图)

标签: postgresql


【解决方案1】:

使用 SQL 标准类型转换 ${myValue}

cast(${myValue} AS varchar)

或使用 Postgres 语法:

${myValue}::varchar 

【讨论】:

  • 我已经尝试过了,但是,如果我传递给 myValue 的字符串中有一个“+”,则查询运行但它不会找到该行。如果 column_one 的值为“+123”,然后我传入“+123”,则查询将与行不匹配,因此,结果为空。如果我将 column_one 修改为“123”,然后使用 myValue“123”运行查询,那么一切正常。为什么“+”会破坏查询? (我都试过了,两者都有同样的问题)
猜你喜欢
  • 2016-04-16
  • 2021-12-09
  • 2021-11-12
  • 1970-01-01
  • 2014-04-05
  • 2018-05-05
  • 2021-05-02
  • 2019-07-03
  • 2021-01-06
相关资源
最近更新 更多