标题:sql语句求助
只看楼主
yetianshi
Rank: 1
来 自:GZ
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-7-26
结帖率:100%
已结贴  问题点数:20 回复次数:6 
sql语句求助
select *
  from  
              (select Cwno,DeptName,Cdate ,Cseno,a.BatchCnt,Ctime,Etime
               from GkjlL_His_His a
               inner join
               OPENDATASOURCE('SQLOLEDB','Data Source=172.17.240.93;User ID=sa;Password=!QAZ2wsx').pddbgz.dbo.[YwCk] e
               on  a.Cwno = e.Wno) a
               where a.BatchCnt !='0' and  DATEDIFF(S,Ctime,Etime)<5
               GROUP BY DeptName,a.Cwno,Cdate ,Cseno,a.BatchCnt,Ctime,Etime
               having Etime like '__:__:__'  

--异常数据举例
select *
  from  
              (select Cwno,DeptName,Cdate ,Cseno,a.BatchCnt,Ctime,Etime
               from GkjlL_His_His a
               inner join
               OPENDATASOURCE('SQLOLEDB','Data Source=172.17.240.93;User ID=sa;Password=!QAZ2wsx').pddbgz.dbo.[YwCk] e
               on  a.Cwno = e.Wno) a
               where a.BatchCnt !='0' and  DATEDIFF(S,Ctime,Etime)<5
               GROUP BY DeptName,a.Cwno,Cdate ,Cseno,a.BatchCnt,Ctime,Etime
               having Etime is not null


以上两个语句为什么执行的结果不一样?求大神帮忙啊啊
搜索更多相关主题的帖子: having sql语句 inner where 
2012-07-26 17:36
qingyunfei
Rank: 1
等 级:新手上路
帖 子:2
专家分:7
注 册:2012-7-26
得分:7 
肯定呢,
当你查询的是一个varchar或者nvarchar类型时,如果这个类型允许为空的话:\
必须要用:is not null 或者is null
在数据库中:null跟' '是有很大区别的
2012-07-26 22:40
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
得分:7 
'__:__:__'与null等同?

★★★★★为人民服务★★★★★
2012-07-27 06:46
yetianshi
Rank: 1
来 自:GZ
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-7-26
得分:0 
回复 2楼 qingyunfei
肯定呢,
当你查询的是一个varchar或者nvarchar类型时,如果这个类型允许为空的话:\
必须要用:is not null 或者is null
在数据库中:null跟' '是有很大区别的


回复:是允许为空的。
select *
  from  
              (select Cwno,DeptName,Cdate ,Cseno,a.BatchCnt,Ctime,Etime
               from GkjlL_His_His a
               inner join
               OPENDATASOURCE('SQLOLEDB','Data Source=172.17.240.93;User ID=sa;Password=!QAZ2wsx').pddbgz.dbo.[YwCk] e
               on  a.Cwno = e.Wno) a
               where a.BatchCnt !='0' and  DATEDIFF(S,Ctime,Etime)<5
               GROUP BY DeptName,a.Cwno,Cdate ,Cseno,a.BatchCnt,Ctime,Etime
              ( having Etime is not null)

可是我用不用最后一句,查询出来的结果都是一样的!用了这句( having Etime is not null),Etime字段的空值还是会显示喔!

2012-07-27 09:29
yetianshi
Rank: 1
来 自:GZ
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-7-26
得分:0 
回复 3楼 cnfarer
having Etime like '__:__:__'  就是要求输出的Etime的值非空吖!在这里应该是和is not null等价的吧?

可是我用了这句( having Etime is not null),Etime字段的空值还是会输出喔!为什么呢?

2012-07-27 09:32
zhousmq
Rank: 1
等 级:新手上路
帖 子:1
专家分:7
注 册:2008-8-31
得分:7 
回复 5楼 yetianshi
你要排除Etime的空值,为什么不在where 之后加入 and Etime is not null

having Etime like '__:__:__'  就是要求输出的Etime的值非空吖
   是要求输出Etime字段只有字符'__:__:__'的数据
2012-07-27 15:02
yetianshi
Rank: 1
来 自:GZ
等 级:新手上路
帖 子:14
专家分:0
注 册:2012-7-26
得分:0 
回复 6楼 zhousmq
select *
  from  
              (select Cwno,DeptName,Cdate ,Cseno,a.BatchCnt,Ctime,Etime
               from GkjlL_His_His a
               inner join
               OPENDATASOURCE('SQLOLEDB','Data Source=172.17.240.93;User ID=sa;Password=!QAZ2wsx').pddbgz.dbo.[YwCk] e
               on  a.Cwno = e.Wno) a
               where a.BatchCnt !='0' and  DATEDIFF(S,Ctime,Etime)<5 and Etime is not null
               GROUP BY DeptName,a.Cwno,Cdate ,Cseno,a.BatchCnt,Ctime,Etime

这样还是会输出空值。。只有用 Etime like '__:__:__'   才能排除。可能是数据库设计的原因。。
2012-07-30 11:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-374167-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.313824 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved