我正在看这个例子。这使得它看起来像单引号不需要在where子句当你给予一个数字列表。我使用oracle数据库,如果这有区别的话。
https://www.sqlservertutorial.net/sql-server-basics/sql-server-in/
SELECT
product_name,
list_price
FROM
production.products
WHERE
list_price IN (89.99, 109.99, 159.99)
ORDER BY
list_price;
那么为什么我这样做的时候toad会抱怨呢?它会把无效的标识符作为错误消息。
这是失败的查询。
select * from table1 where id in (1, 2, 3, 4);
我这样做的时候,蟾蜍没有抱怨。
select * from table1 where id in ('1', '2', '3', '4');
2条答案
按热度按时间fcg9iug31#
检查以确保您使用的是预期的数据类型。在我的情况下,我使用的是
CHAR(12)
,这就是为什么我需要引号。如果这不起作用,你的表可能是大写字母,所以试试这个。
lndjwyie2#
既然问题是关于获取不同的数字,那么让我们来看看一个简单的方法。
当然,如果该列总是只保存数字,而不允许使用字符串,那么我们应该只更改它的数据类型。
当然,如果我们只想检查几个数字,比如1、2和3,我们可以使用
IN
子句,就像问题中所示的那样。但是让我们假设我们不能改变数据类型,因为字符串也可能出现,我们需要接受很大范围的数字。
例如,我们希望接受200到300之间的所有数字,但我们不喜欢编写包含101个值的
IN
子句,不是吗?因此,我们可以使用
VALIDATE_CONVERSION
来确保只考虑数字项。然后我们使用
CAST AS INT
来检查数字应该在200和300之间。查询将是这样一个:
我们可以在这里尝试一下:db<>fiddle