如何查询Buyer表中含大写字符的sEmailAddress字段数据
解决方法:找出包含大写字符的邮箱地址
没问题,我来帮你搞定这个需求!要从Buyer表的sEmailAddress字段里筛选出所有包含大写字母的邮箱,核心是利用数据库的大小写敏感比较或正则匹配能力。不同数据库的写法略有区别,咱们分常见类型来给你具体的查询语句:
MySQL/MariaDB 写法
MySQL默认不区分大小写,所以需要用BINARY强制按二进制值比较,或者用正则匹配大写字符:
方法1:正则匹配(带二进制校验)
SELECT sEmailAddress FROM Buyer WHERE BINARY sEmailAddress REGEXP '[A-Z]';
方法2:对比原字段与转小写后的字段
SELECT sEmailAddress FROM Buyer WHERE BINARY sEmailAddress != LOWER(sEmailAddress);
原理:如果原字段和全小写版本不一样,说明里面存在大写字符。
SQL Server 写法
如果你的SQL Server用的是默认不区分大小写的排序规则,需要指定区分大小写的排序规则,或者用正则(2016及以上版本支持):
方法1:指定区分大小写排序规则对比
SELECT sEmailAddress FROM Buyer WHERE sEmailAddress COLLATE SQL_Latin1_General_CP1_CS_AS != LOWER(sEmailAddress);
方法2:正则匹配(SQL Server 2016+)
SELECT sEmailAddress FROM Buyer WHERE sEmailAddress REGEXP '[A-Z]';
PostgreSQL 写法
PostgreSQL默认区分大小写(除非字段特意设置了不区分规则),直接用正则或对比即可:
方法1:正则匹配
SELECT sEmailAddress FROM Buyer WHERE sEmailAddress ~ '[A-Z]';
方法2:对比原字段与转小写后的字段
SELECT sEmailAddress FROM Buyer WHERE sEmailAddress != LOWER(sEmailAddress);
Oracle 写法
Oracle默认不区分大小写,需要用REGEXP_LIKE并指定大小写敏感参数:
SELECT sEmailAddress FROM Buyer WHERE REGEXP_LIKE(sEmailAddress, '[A-Z]', 'c');
这里的'c'表示启用大小写敏感匹配。
所有上述语句都只会返回符合条件的邮箱列表,不会对数据库数据做任何修改,完全符合你的需求。如果你的数据库有特殊的排序规则设置,可以根据实际情况微调~
内容的提问来源于stack exchange,提问作者Kieran Smith
相关产品推荐
相关产品推荐

