如何将 SQL 比较条件 ANY/SOME 与 DATATYPE Char 一起使用

Posted

技术标签:

【中文标题】如何将 SQL 比较条件 ANY/SOME 与 DATATYPE Char 一起使用【英文标题】:How do I use the SQL Comparison Condition ANY/SOME with the 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 获取教程。 【参考方案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 的解决方案肯定适用于任何地方。

以上是关于如何将 SQL 比较条件 ANY/SOME 与 DATATYPE Char 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

ANY,SOME,ALL 在SQL语句中的区别?

mysql之any,some all(zz)

MySQL中 any,some,all 的用法

SQL中的ALL,ANY,SOME的用法

SQL:我们需要 ANY/SOME 和 ALL 关键字吗?

MySQL数据库基础(子查询与链接)(持续更新中)