sql - 如果其列包含列表中的任何值,则从结果中排除
问题描述
假设我有一个1
通过id 的 SQL 表,30
但我想从 sql 中排除数字 7、10、21。
如果不写类似的东西我怎么能做到这一点
SELECT *
FROM TBL
WHERE COL <> '7' AND COL <> '10' AND COL <> '21'
但是,写一些类似的东西
SELECT *
FROM TBL
WHERE COL NOT IN (@IDS)
尝试该示例时,如果等于一个数字,它会起作用@IDS
,但如果它等于多个数字,则所有记录都会显示。
为了澄清它必须是数字列表的原因是它是如何传递给 SQL 的。我无法更改数据的传递方式。
澄清更多,因为我应该在原始问题中说明它。我不知道传递给 SQL 语句的确切数字,我提供的数字是用于示例,但它可以是任何数字。
解决方案
你可以这样写:
WHERE COL NOT IN (7, 10, 21)
如果你想传入一个字符串,那么你可以拆分它。在 SQL Server 2016+ 中,您可以使用string_split()
(并且您可以SPLIT()
在 Web 上获取早期版本的功能)。
WHERE COL NOT IN (SELECT * FROM STRING_SPLIT('7,10,21'))
请注意,这会从字符串转换为整数,这可能会阻止使用索引。所以:
WHERE COL NOT IN (SELECT CONVERT(INT, value) FROM STRING_SPLIT('7,10,21'))
或者NOT EXISTS
:
WHERE EXISTS (SELECT
FROM STRING_SPLIT('7,10,21')
WHERE ?.COL = TRY_CONVERT(INT, value)
)
推荐阅读
- javascript - Angular:Http vs fetch api
- .net-core - EntityFramework Core database first, Scaffold-DbContext A positional parameter cannot be found that accept argument '--use-database-names' 错误
- excel - FileSystemObject - 无法打开保存在文件夹中的文件
- swift - 错误类型“MyClass”在“onTimer”上没有成员
- android - PayPal Android SDK 不适用于印度货币 INR
- bash - Bash:回显和复制结果
- vb.net - 需要用计时器错开蛇的身体部位
- koa - 如何在 KOA 中解析二进制数据(“multipart/form-data”)?
- python - 通过 tor 发出请求,requests.exceptions.ConnectionError Errno 61: Connection Refused
- unit-testing - 如何使用 jest 对 Vue.js 组件中的方法进行单元测试