PostgreSQL/SQL:如何判断字符串大小写并筛选含小写字符的记录
如何在PostgreSQL/SQL中筛选包含小写字符的字符串记录
嘿,这个需求其实很好解决——要找出Content字段里混有小写字母的记录对吧?我给你分享两种实用的方法,都能完美匹配你的测试场景:
方法一:用正则表达式精准匹配(PostgreSQL专属)
PostgreSQL原生支持~操作符做正则匹配,直接瞄准小写字母范围就行,写法简单直观:
SELECT id, Content FROM content WHERE Content ~ '[a-z]';
这个语句的逻辑很明确:只要Content字段里存在至少一个a-z范围内的小写英文字母,就会被筛选出来。对应你的测试数据,id2(Test)、3(TEst)、4(TESt)都会被选中;而id1(全大写)、id5(大写加数字)不符合条件,会被自动排除。
方法二:通过大小写转换对比(通用兼容)
如果你想写适配更多数据库的通用SQL,可以利用大小写转换函数做对比:
SELECT id, Content FROM content WHERE Content != UPPER(Content);
思路很巧妙:把原字符串转成全大写后,如果和原字符串不相等,说明原字符串里肯定存在小写字母(毕竟UPPER()只会把小写转成大写,数字、符号这类非字母字符不会被改变)。比如Test转成TEST后和原字符串不等,会被选中;而TEST01转大写后还是自身,和原字符串相等,就不会被筛选出来。
小提醒
如果你的数据库使用了不区分大小写的排序规则(collation),直接用!=做字符串对比可能会失效,这时候优先用正则表达式的方法更可靠——正则匹配是基于字符的ASCII值判断的,不受排序规则影响。
内容的提问来源于stack exchange,提问作者harsh kumar




