SQL / DB2 数组在 Where 中声明

Posted

技术标签:

【中文标题】SQL / DB2 数组在 Where 中声明【英文标题】:SQL / DB2 Array in Where declared in with 【发布时间】:2021-10-25 10:33:08 【问题描述】:

任何人都知道使用参数/变量查询的解决方法,以便在 db2 v11 上的函数中使用 where [...]?

我尝试了什么:

DECLARE @list varchar(23) = '1,2,3,4'
SELECT ...FROM tbl WHERE col IN (@list)
WITH test(val) AS (VALUES(ARRAY['5','9']))
SELECT ... FROM table, test WHERE col ANY(val)

两者都不起作用,第一个与 db2 不兼容,第二个不起作用,因为他无法拆分值。

有什么想法或例子吗?

【问题讨论】:

【参考方案1】:

试试这个:

SELECT t.*
FROM tbl t
WHERE EXISTS
(
  select 1
  from xmltable
  (
  'for $id in tokenize($s, ",") return <i>string($id)</i>' 
  passing '1,2,3,4' as "s"
  columns 
    tok int path '.'
  ) v
  where v.tok = t.col
);

如果您想在运行时将整数列表作为逗号分隔的字符串提供,您可以使用参数标记而不是字符串常量 1,2,3,4,就像通常的字符串参数一样。

【讨论】:

【参考方案2】:

声明本地临时表并在其中插入您的值列表?

【讨论】:

以上是关于SQL / DB2 数组在 Where 中声明的主要内容,如果未能解决你的问题,请参考以下文章

db2中sql语句的where从句 不等于怎么写

SQL:选择 * where 属性匹配数组中的所有项目

将日期转换放在where子句db2 sql中

bcb中,怎么用数组获取SQL语句执行的结果?

将 IN() 用于数组的 PL/SQL where 子句

我们应该在检索数据时避免 DB2 SQL 中的 IN 子句吗?