如何编写T-SQL查询检索包含对应First_Name和Last_Name的Email列值?
嘿,这需求很常见,我来给你写两个实用的T-SQL查询方案,都能帮你筛选出Email里包含对应行First_Name和Last_Name拼接内容的记录。假设你的表名叫Users,如果实际表名不一样,替换一下就行~
方法1:用CHARINDEX检查拼接字符串是否存在
这个方法会直接检查First_Name和Last_Name的拼接串是否是Email的子串,逻辑很直观:
SELECT First_Name, Last_Name, Email FROM Users WHERE CHARINDEX(First_Name + Last_Name, Email) > 0;
CHARINDEX函数会返回拼接串在Email里的起始位置,如果返回大于0,就说明Email里包含这个拼接内容。
方法2:用LIKE模糊匹配
如果你更喜欢用LIKE语法,也可以这么写,效果完全一致:
SELECT First_Name, Last_Name, Email FROM Users WHERE Email LIKE '%' + First_Name + Last_Name + '%';
这里的%是通配符,代表任意长度的字符(包括0个),整个条件的意思就是Email中存在First_Name接Last_Name的连续字符串。
额外注意事项
- 大小写敏感问题:如果你的SQL Server实例用的是区分大小写的排序规则(比如
SQL_Latin1_General_CP1_CS_AS),上面的查询会严格区分大小写。要是想忽略大小写匹配,可以用COLLATE指定不区分大小写的规则,示例如下:SELECT First_Name, Last_Name, Email FROM Users WHERE CHARINDEX(First_Name + Last_Name, Email COLLATE SQL_Latin1_General_CP1_CI_AS) > 0; - 适配任意姓名顺序的场景:要是你需要筛选的是Email中同时包含First_Name和Last_Name(不管先后顺序)的记录,可以把条件改成两个独立的存在性判断:
SELECT First_Name, Last_Name, Email FROM Users WHERE CHARINDEX(First_Name, Email) > 0 AND CHARINDEX(Last_Name, Email) > 0;
这样就能覆盖不同的业务场景啦~
内容的提问来源于stack exchange,提问作者user12554687
相关产品推荐
相关产品推荐

