SQL Server 2014:如何排除不包含特定值的记录?
嘿,针对你在SQL Server 2014里要排除不包含特定值的记录这个需求,我结合你给出的临时表结构,整理了几种实用的解决方案,直接就能套用:
首先先模拟你的临时表(方便你测试验证):
-- 创建临时表并插入示例数据 CREATE TABLE #TempTransactions ( Account_No VARCHAR(20), Customer_Name VARCHAR(50), Invoice_No VARCHAR(20), Amount DECIMAL(10,2), Reason_Comment VARCHAR(100), Trans_Code INT ); INSERT INTO #TempTransactions VALUES ('12345678', 'John Doe', 'A23782998', 326.28, 'Payment', 2), ('12345678', 'John Doe', 'A23783001', 150.00, 'Refund', 3), ('98765432', 'Jane Smith', 'B45678901', 450.75, 'Partial Payment', 2);
1. 排除不包含精确特定值的记录
如果你需要保留某个字段完全匹配特定值的记录(也就是排除所有不匹配的),比如只保留Trans_Code为2的记录:
-- 方式1:直接筛选匹配值(等价于排除不匹配的) SELECT * FROM #TempTransactions WHERE Trans_Code = 2; -- 方式2:用NOT反向筛选(效果和上面一致,看你习惯哪种写法) SELECT * FROM #TempTransactions WHERE NOT Trans_Code <> 2;
2. 排除不包含模糊关键词的记录
如果要基于字符串字段的部分内容筛选(比如保留Reason_Comment里包含"Pay"的记录),用LIKE操作符:
-- 保留包含"Pay"关键词的记录(排除不包含的) SELECT * FROM #TempTransactions WHERE Reason_Comment LIKE '%Pay%';
注意:%是通配符,代表任意长度的字符,如果你要匹配开头或结尾的关键词,可以调整为'Pay%'或'%Pay'
3. 排除不包含多个特定值的记录
如果需要保留字段匹配多个值中任意一个的记录,用IN子句:
-- 保留Trans_Code为2或3的记录(排除其他值) SELECT * FROM #TempTransactions WHERE Trans_Code IN (2, 3);
额外注意:处理NULL值
如果你的字段可能存在NULL(比如部分记录的Trans_Code为空),要明确NULL是否属于"不包含特定值"的范围:
- 如果要排除NULL(只保留匹配特定值的):直接用上面的语句即可,因为NULL和任何值的比较结果都是UNKNOWN,会被自动排除
- 如果要保留NULL和匹配特定值的记录:
SELECT * FROM #TempTransactions WHERE Trans_Code = 2 OR Trans_Code IS NULL;
内容的提问来源于stack exchange,提问作者user1777929
相关产品推荐
相关产品推荐

