SQLServer,存在表RdRecord08,存在字段cMemo,查询所有cMemo不包含关键字“PDA转库单传入”的记录

2024-07-04 15:54 SQLServer,存在表RdRecord08,存在字段cMemo,查询所有cMemo不包含关键字“PDA转库单传入”的记录已关闭评论

要在SQL Server中查询表RdRecord08中所有cMemo字段不包含关键字“PDA转库单传入”的记录,可以使用NOT LIKE或者NOT EXISTS结合子查询来实现。这里我将给出两种方式的查询语句:

使用 NOT LIKE

如果cMemo字段允许NULL值,你需要额外处理NULL的情况。使用IS NOT NULL来确保NULL值不会被当作不包含指定字符串的情况处理。

SELECT *
FROM RdRecord08
WHERE cMemo NOT LIKE '%PDA转库单传入%' OR cMemo IS NULL;

使用 NOT EXISTS

这种方式会更清晰地避免NULL值的问题,因为它只检查那些确实有值的cMemo字段。

SELECT r.*
FROM RdRecord08 r
WHERE NOT EXISTS (
    SELECT 1
    FROM (
        SELECT cMemo
        FROM RdRecord08
        WHERE cMemo LIKE '%PDA转库单传入%'
    ) AS subquery
    WHERE subquery.cMemo = r.cMemo
);

然而,上面的NOT EXISTS版本实际上并不是最有效的写法,因为其内部的子查询会被针对每一行执行。一个更优化的版本可以是:

SELECT *
FROM RdRecord08
WHERE cMemo NOT LIKE '%PDA转库单传入%' OR cMemo IS NULL;

或者,如果你确定cMemo字段不允许NULL值,你可以简化查询为:

SELECT *
FROM RdRecord08
WHERE cMemo NOT LIKE '%PDA转库单传入%';

这里推荐使用简单的NOT LIKE查询,因为它是最直接且通常最高效的实现方式。在SQL Server中,LIKE操作符会进行模式匹配,%是通配符,代表任何字符序列(包括空字符序列)。NOT LIKE则是在结果集中排除掉任何匹配给定模式的行。

请注意,如果cMemo字段包含大量的数据,而且需要频繁地进行这种查询,考虑为cMemo字段创建一个全文索引或者包含LIKE模式前缀的覆盖索引,这将有助于提高查询性能。

当前文章价值1.2元,扫一扫支付后添加微信提供帮助!(如不能解决您的问题,可以申请退款)

你可能感兴趣的文章

来源:每日教程每日一例,深入学习实用技术教程,关注公众号TeachCourse
转载请注明出处: https://teachcourse.cn/3571.html ,谢谢支持!

资源分享

分类:SQLServer 标签:, ,
Thinkpad笔记本开机提示错误Error 1804 Thinkpad笔记本开机提示错误Er
Android面试笔记二:果肉教育 Android面试笔记二:果肉教育
harmony学习PersistentStorage的应用 harmony学习PersistentStorage
ubuntu写入权限(W)和执行权限(X) ubuntu写入权限(W)和执行权限(X

评论已关闭!