【问题标题】:Convert varchar parameter with CSV into column values postgres将带有 CSV 的 varchar 参数转换为列值 postgres
【发布时间】:2016-03-14 15:40:17
【问题描述】:

我有一个带有 varchar 类型输入参数的 postgres 查询。

该参数的值用于 where 子句。

到目前为止,只有一个值被发送到查询,但现在我们需要发送多个值,以便它们可以与 IN 子句一起使用。

之前

  value='abc'.

  where data=value.//current usage

现在

  value='abc,def,ghk'.

  where data in (value)//intended usage

我尝试了很多方法,即提供价值作为

  value='abc','def','ghk'

或者

  value="abc","def","ghk" etc.

但是没有一个有效,并且查询没有返回任何结果,尽管有一些匹配的数据可用。如果我直接在 IN 子句中提供值,我会看到数据。

我认为我应该以某种方式将逗号分隔字符串的参数拆分为多个值,但我不确定该怎么做。

请注意它的 Postgres 数据库。

【问题讨论】:

标签: postgresql plpgsql


【解决方案1】:

您可以尝试将输入字符串拆分为数组。类似的东西:

where data = ANY(string_to_array('abc,def,ghk',','))

【讨论】:

  • 谢谢伊戈尔,我尝试使用 ANY(string_to_array) 你回答但似乎我没有正确版本的 postgres。虽然运行 select version() 显示 15.3,但在运行 ANY(string_to_array) 语句时,我看到以下错误。未知方法 string_to_array
  • @user2654241 没有 postgres 版本15.3。你确定你使用的是 postgres 而不是它的一个分支?
  • 我在 Labkey 的查询模式浏览器中使用它。你是对的,虽然 select version() 显示 15.3,但我也对它感到困惑。无论如何,我会尝试基本查询,看看我是否可以使用 string_to_array。
  • 还有其他类似的功能。喜欢regexp_split_to_array。或者你可以自己写这样的函数。
猜你喜欢
  • 1970-01-01
  • 2011-02-18
  • 2013-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-08
  • 2021-09-15
相关资源
最近更新 更多