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

SQL查询返回不符合WHERE条件的记录,原因是什么?

问题分析:查询返回意外邮箱记录的原因及修复方案

嗨,我来帮你捋捋这个问题——你明明要查的是emailfromsomeone@hotmail.com,结果却跑出一条两个邮箱都是'e'的记录,这确实是个隐蔽的小坑!

咱们先看你的SQL代码里最关键的问题:

问题根源:变量长度未指定

你声明变量的时候写的是declare @email as varchar,在SQL Server里,如果varchar不指定长度,默认只会分配1个字符的存储空间。这就意味着,当你给@email赋值'emailfromsomeone@hotmail.com'时,它只能存下第一个字符'e',剩下的全被截断了!

这直接导致你的WHERE条件完全跑偏:原本应该匹配完整邮箱,现在变成了匹配任何邮箱字段(转小写后)等于'e'的记录,那条销售人员操作失误的记录正好撞中这个条件,所以被查出来了。

修复方案:给变量指定足够长度

只需要给@email变量加上合适的长度就行,邮箱一般不会超过255个字符,修改后的代码如下:

declare @email as varchar(255) -- 指定足够的长度,避免截断
set @email = 'emailfromsomeone@hotmail.com' 
select 
    C.[No_], 
    C.[First Name] firstname, 
    C.[Surname] lastname, 
    C.[E-Mail] as email, 
    C.[E-Mail 2] as email_2, 
    C.[GDPR Opt-in] as GDPR_opt_in, 
    C.[Salesperson Code] as sales_person 
from [Contact] as C 
where lower(C.[E-Mail]) = lower(@email) or lower(C.[E-Mail 2]) = lower(@email)

额外小建议:如果你的业务需要支持带特殊字符的邮箱(比如包含非英文字母的邮箱),可以把varchar换成nvarchar(255),这样能更好地兼容Unicode字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:05:17