如何编写SQL筛选仅发送给单个收件人的Email_To数据?
用SQL识别仅含单个收件人的任务
问题场景
现有如下结构的数据:
| TaskID | Email_To |
|---|---|
| 1 | @Email.org.uk; |
| 2 | @Email.org.uk; @Email.org.uk; |
| 3 | @Email.org.uk |
Email_To列中多收件人以分号;分隔,但格式存在不一致:单个收件人可能带尾部分号,也可能不带。需要筛选出仅发送给单个收件人的任务。
解决方案
核心思路是先统一清理Email_To的格式,再判断是否存在多收件人分隔符:
具体SQL示例
MySQL / PostgreSQL 版本
SELECT TaskID, Email_To FROM your_table_name WHERE TRIM(BOTH ' ;' FROM Email_To) NOT LIKE '%;%';
SQL Server 版本
SELECT TaskID, Email_To FROM your_table_name WHERE TRIM(' ;' FROM Email_To) NOT LIKE '%;%';
Oracle 版本
SELECT TaskID, Email_To FROM your_table_name WHERE TRIM(BOTH ' ;' FROM Email_To) NOT LIKE '%;%';
逻辑解释
TRIM(BOTH ' ;' FROM Email_To):同时去掉字符串首尾的空格和分号,统一格式。比如把@Email.org.uk;转为@Email.org.uk,把@Email.org.uk; @Email.org.uk;转为@Email.org.uk; @Email.org.uk。NOT LIKE '%;%':判断清理后的字符串中是否不存在分号,无分号则说明仅含单个收件人。
补充说明
即便收件人之间的分隔符是; (分号加空格),上述逻辑依然有效——清理后多收件人的字符串仍会保留分号,单个收件人的字符串则无分号。
内容的提问来源于stack exchange,提问作者EAsh
相关产品推荐
相关产品推荐

