sql 判断日期是否相等问题

来源:百度知道 编辑:UC知道 时间:2024/06/02 04:53:29
select distinct nnp.UserID as '员工编号',nnp.UserName as '员工姓名',nnp.INTIME as '上班时间',nnp.IFWorker as '类别' from #NotnullPunch as nnp , tb_Overtime as tot where datepart(Hour,nnp.INTIME)=17 and convert(varchar(10),nnp.INTIME,120) <>tot.O_Date 在写再看看我这句话,为什么我写没写这句话(and convert(varchar(10),nnp.INTIME,120) <>tot.O_Date)的结果是一样的呢?
tot.O_Date的显示形式为:'2008-08-07'
我查出的结果中有这种现象nnp.INTIME的值为 2008-07-16
但我的tb_Overtime表中tot.O_Date 字段的值有为2008-07-16的行啊, 它应该把含有 2008-07-16这样的行剔除掉才对啊

我看你的算法写得没有什么毛病。即使是这句 也是字符串与字符串的比较。

写不写这句都一样,只能说明,所查的数据中本来就 不存在 日期与tot.O_Date的日期相同,而时间在 17:00到18:00之间的数据。
-------------
做个试验就可以看出一些东东来了:
加上这句“convert(varchar(10),nnp.INTIME,120) <>convert(varchar(10),tot.O_Date,120) ”是为了剔除一些数据,那就可以先查一些究竟是哪些数据将被剔除嘛,只要在那语句中放上这句,但把其中的“<>”改为“=”。
查一下看,结果究竟是什么数据。

结果可能是空的,那就说明加了这句与不加对现有数据来说是一样的;
结果也可能有数据,但结果与你想象的不同,那就要查一下前面的语句了,比如临时表#NotnullPunch 以及表 tb_Overtime中的数据情况。

像我查询公司所有员工和明天之前公司所有的员工个数是一样的同个道理。
加这个条件不会对原来的结果集产生影响。

在时间比较时 尽量两边都用相同的格式进行格式化
然后比较
convert(varchar(10),nnp.INTIME,120) <>convert(varchar(10),tot.O_Date,120)