【问题标题】:How do I use the SQL Comparison Condition ANY/SOME with the DATATYPE Char如何将 SQL 比较条件 ANY/SOME 与 DATATYPE Char 一起使用
【发布时间】:2021-04-26 10:27:42
【问题描述】:

我是 SQL 新手,不知道如何将 ANY 运算符与两个字符串一起使用。

我想得到匹配两个字符串之一的结果。 我知道使用我已经做过的 IN/OR 可以轻松实现结果,但我们被要求对 ANY 做同样的事情。

我的代码如下所示:

SELECT * FROM table WHERE column = ANY ('ASD 357','GHJ 680')

我总是收到此错误消息:

SQL0104N 在下面发现了一个意外的标记“'ASD 357'” “column = ANY(”。预期的标记可能包括:“”。 SQLSTATE=42601

我必须做些什么才能让它工作?

【问题讨论】:

  • 您应该对ANY 运算符使用子查询。查看link 获取教程。

标签: sql db2


【解决方案1】:

问题不是ANY,而是列表。你要IN:

SELECT *
FROM table
WHERE column IN ('ASD 357', 'GHJ 680');

也就是说,这对于整数列也会失败:

WHERE column = ANY (1, 2, 3)

ANY 如果你有一个子查询就好了:

WHERE column = ANY (SELECT x FROM y)

【讨论】:

  • 只有 INTEGER 才有可能包含值的列表吗?因为 ANY 也可能像这样“SELECT empno, sal FROM emp WHERE sal > ANY (2000, 3000, 4000);”来源:link
  • @Deno123 该链接适用于 Oracle,而不是 DB2。 SQL 标准仅定义 {ANY |一些 | ALL} 带有子查询,DB2 AFAIK 也是如此。
  • @MarkRotteveel 我不知道谢谢。因此,如果我理解正确,在这里使用 ANY 会非常糟糕。因为无论如何我都必须在子查询中使用 IN/OR 来过滤我想要的那些。所以我可以在外部查询开始。
  • @Deno123 这与 bad 无关,只是试图做一些语法中没有定义的事情。
  • @Deno 子查询也可以用VALUES 完成(至少在DB2 中),所以WHERE column = ANY (VALUES 'ASD 357','GHJ 680') 可以工作。但 Gordon Linoff 的解决方案肯定适用于任何地方。
猜你喜欢
  • 2010-12-03
  • 1970-01-01
  • 2012-09-12
  • 2021-08-13
  • 2013-04-30
  • 2020-05-06
  • 2016-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多