You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL多字符串筛选问题:如何提取不含指定字符串的姓名数据

解决SQL字符串包含过滤的问题

你的原语句是判断firstname或lastname完全等于'test'/'Guest'/'.'时排除,但你需要的是排除任意一列包含这些子串的记录,所以得用字符串包含判断的语法,不同数据库的写法略有差异:

通用SQL(适用于MySQL、SQL Server、PostgreSQL等多数数据库)

使用NOT LIKE搭配通配符%(代表任意长度的任意字符):

SELECT
  firstname,
  lastname
FROM user
WHERE 
  -- firstname 不包含 test、Guest、.
  firstname NOT LIKE '%test%'
  AND firstname NOT LIKE '%Guest%'
  AND firstname NOT LIKE '%.%'
  -- lastname 同样不包含这些内容
  AND lastname NOT LIKE '%test%'
  AND lastname NOT LIKE '%Guest%'
  AND lastname NOT LIKE '%.%';

简化写法(部分数据库支持正则)

如果你的数据库支持正则表达式(比如MySQL 8+、PostgreSQL),可以用正则简化条件,减少重复代码:

MySQL 8+ 写法

SELECT
  firstname,
  lastname
FROM user
WHERE 
  firstname REGEXP 'test|Guest|\.' = 0
  AND lastname REGEXP 'test|Guest|\.' = 0;

PostgreSQL 写法

SELECT
  firstname,
  lastname
FROM user
WHERE 
  firstname !~* 'test|Guest|\.'
  AND lastname !~* 'test|Guest|\.';

(!~*表示不匹配正则且忽略大小写,若需区分大小写,改用!~)

关键说明

  • %是SQL标准通配符,%test%表示字符串任意位置包含'test'
  • 正则里的|代表逻辑或,\.是转义后的点(点在正则中是匹配任意字符的特殊符号,必须转义才能匹配实际的点)

内容的提问来源于stack exchange,提问作者Mark Handy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 21:17:06