| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 689 人关注过本帖
标题: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
快速回复:sql语句求助
数据加载中...
 
   



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

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