筛选出sql 查询结果中 不包含某个字符

2 02 3 年,我的一个朋友在数据库上编写了一个 SQL 查询,试图查找不包含特定名称的卡号。
他使用了以下查询:
sql SELECT 卡号,名称 FROM 卡表 WHERE 卡号 NOT IN (SELECT 卡号 FROM 卡表 WHERE 名称 = 'C');
它首先在子查询中查找名称为“C”的所有卡号,然后使用 NOT IN 排除这些卡号,只留下其他卡号和对应的名称。
这种嵌套查询对于执行过滤和筛选功能非常有用。

结果应该是一个包含除名称为“C”之外的所有卡号和名称的表。
具体效果取决于数据库中的数据。

我只是认为如果有太多卡号与名称“C”匹配,这个查询可能会慢一些。
你可以理解这一点。
如果效果不佳,您可能需要考虑对其进行优化。

MSSQL删除不包含某一个字符

是的,这就是问题所在。
要删除不包含“Futian”的记录,请使用“delete from”和表名,并写入“where Address != 'Futian'”。
不要忘记将表名称替换为您的实际表名称。

要删除包含“Fukuda”但不完全匹配的单词,请使用“NOT LIKE '%Fukuda%'”。
这将删除地址中包含“福田”的所有记录。

不要忘记备份数据,以免意外删除重要数据。
首先在小数据集上进行测试,然后在大数据集上进行操作。
请亲眼检查并小心处理。

SQL语句查询 不包括XX字符 求助

等等,昨天我在办公室整理数据库备份时,正好看到类似的情况。
当时我在一个老项目中寻找一条特定的SQL查询语句,那个语句好像有替换功能。
我最初使用的是non-like方法,即直接在查询中添加WHERE子句,例如列WHERE NOT LIKE '%replace%'。
嘿,这真的很简单,我几秒钟就找到了。
不过该表有8 万多行数据,速度有点慢。

后来尝试了替换的方法,就是检查替换前后字符串的长度。
我写了一个小脚本来运行它,先替换然后比较长度。
事实上,如果长度没有改变,则意味着该列中没有替换字符串。
这个方法挺有趣的,但是写脚本有点繁琐,而且如果替换的字符串恰好两边都有空格,长度可能不会改变,还得重新判断。

后来我用了charIndex。
该函数直接返回位置。
如果大于 0,它将存在。
如果小于或等于0,则不返回。
在SQL Server中运行charIndex('replace',column),结果非常快。
我看了一下执行计划,发现这个函数用起来效率很高。
直接搜索索引,不像 LIKE 需要全表扫描。

但是,我突然想到,我从来没有见过SQL Server中使用的pathIndex方法。
看起来它与路径有关,但替换和 charIndex 在这里都很好。
我查了一下,Oracle 中似乎使用 pathIndex 来查找路径字符串。
SQL Server中好像没有这样的功能。
所以这个方法可能不适合。

总之,在这些方法中,charIndex似乎是最直接、最符合SQL Server风格的。
但是如果数据量特别大,比如几百万行,charIndex还可以吗?无论如何,这取决于指数。
等等,还有一件事。
我看到网上有人说,使用charIndex时,如果列是VARCHAR(MAX)类型,可能会有点慢。
但我的场景充满了普通的 VARCHAR 所以应该没问题。

归根结底,选择哪种方法要根据具体情况而定。
对于小表,只需使用 NOT LIKE。
对于大表或者性能要求较高的表,应该使用charIndex或者replace来精确匹配。
但是,如果replace函数使用得非常频繁,你会考虑改变业务逻辑,直接存储一个flag来让检查更快吗?这是值得思考的。