SQL查询异常排查:筛选2007年前入职且奖金≥8.00的员工出错
问题出在奖金条件的写法上!
嘿,我一眼就瞅到问题根源了:你错误地用Access专属的日期分隔符#来包裹数值型的奖金值8.00,这直接导致数据库的判断逻辑跑偏了。
为啥会出问题?
- 在Microsoft Access的SQL语法里,
#是专门用来标记日期/时间类型值的,比如你写的#01/01/2007#就完全正确,因为EMP_HIREDATE是日期字段。 - 但EMP_PCT是数值类型(不管是小数还是百分比数值),你把
8.00用#包起来后,数据库会试图把它解析成日期——显然8.00不是合法的日期格式,数据库会做错误的隐式转换,最终的判断结果和你预期的“奖金不低于8.00”完全不符,自然会把不符合条件的员工也捞出来。
修正后的正确SQL语句
把奖金数值两边的#去掉,直接用纯数值写法就行:
SELECT EMP_NUM, EMP_LNAME, EMP_FNAME, EMP_HIREDATE, EMP_PCT FROM employee WHERE EMP_HIREDATE < #01/01/2007# AND EMP_PCT >= 8.00;
额外提醒
如果你的EMP_PCT字段存储的是百分比比例(比如8%存成0.08),那你得把条件改成EMP_PCT >= 0.08——不过根据你的描述,应该是直接存的8.00这种数值,所以上面的修正就够用啦。
内容的提问来源于stack exchange,提问作者user3529812
相关产品推荐
相关产品推荐

