各位来帮我看看这个语句有什么问题。。。

yinsuxia 2012-11-28 09:09:18

select * from GoldCardReplacementData
where 1=1 and len(ReturnDate)>0 or len(ReturnReason)>0
and convert(nvarchar(10),returndate,120)!='1900-01-01'
and convert(nvarchar(10),ReturnDate,120)>='2012-11-01'
and convert(nvarchar(10),ReturnDate,120)<='2012-11-28'

表goldcardreplacementData里面的returndate中的数据有这么几类:“正常的日期”,“1900-01-01”,“null”,我现在想查询,这张表里面的只要returndate为正常的日期都查出来,并且根据提供的日期区间将数据查询出来,现在我这个语句有问题,它把所有的数据都查询出来了,请问,我这个句子要怎么改呢?
...全文
91 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinkaha 2012-11-28
  • 打赏
  • 举报
回复
select * from GoldCardReplacementDatawhere 1=1 and len(ReturnDate)>0 or len(ReturnReason)>0 and convert(nvarchar(10),returndate,120)!='1900-01-01' and convert(nvarchar(10),ReturnDate,120)>='2012-11-01' and convert(nvarchar(10),ReturnDate,120)<='2012-11-28' 楼主这个OR有问题吧,这样只要ReturnReason这个字段有数据,就满这个这个条件,其余条件就不起作用了
yinsuxia 2012-11-28
  • 打赏
  • 举报
回复
引用 6 楼 TravyLee 的回复:
select * from GoldCardReplacementData where ReturnReason is not null--排除为空的 and convert(nvarchar(10),returndate,120)<>'1900-01-01'--排除你说的那种情况 and ReturnDate between '2012-11-01' and '……
这个是可以的,不好意思,刚才没看到。。。
  • 打赏
  • 举报
回复
select * from GoldCardReplacementData where ReturnReason is not null--排除为空的 and convert(nvarchar(10),returndate,120)<>'1900-01-01'--排除你说的那种情况 and ReturnDate between '2012-11-01' and '2012-11-28'--筛选时间范围内的 把你的数据贴出来
yinsuxia 2012-11-28
  • 打赏
  • 举报
回复
引用 4 楼 TravyLee 的回复:
SQL code?12345select * from GoldCardReplacementDatawhere 1=1 and ReturnReason is not nulland convert(nvarchar(10),returndate,120)!='1900-01-01' and ReturnDatebetween '2012-11-01' and '201……
还是不行,returndate之前是varchar类型,我把它改成datetime类型,里面的1900年的数据是系统自动改的,这些值以前是空字符串,修改为datetime时,空字符串变成了1900-01-01的日期。
  • 打赏
  • 举报
回复

select * from GoldCardReplacementData
where 1=1 and ReturnReason is not null
and convert(nvarchar(10),returndate,120)!='1900-01-01' 
and ReturnDatebetween '2012-11-01' and '2012-11-28'
yinsuxia 2012-11-28
  • 打赏
  • 举报
回复
引用 2 楼 yinsuxia 的回复:
引用 1 楼 TravyLee 的回复:SQL code?123456select * from GoldCardReplacementDatawhere 1=1 and len(ReturnDate)>0 or len(ReturnReason)>0 and convert(nvarchar(10),returndate,120)!='1900-01-01' and ……
returndate就是datetime类型的。。。
yinsuxia 2012-11-28
  • 打赏
  • 举报
回复
引用 1 楼 TravyLee 的回复:
SQL code?123456select * from GoldCardReplacementDatawhere 1=1 and len(ReturnDate)>0 or len(ReturnReason)>0 and convert(nvarchar(10),returndate,120)!='1900-01-01' and convert(datetime,Ret……
有变化吗??
  • 打赏
  • 举报
回复

select * from GoldCardReplacementData
where 1=1 and len(ReturnDate)>0 or len(ReturnReason)>0 
and convert(nvarchar(10),returndate,120)!='1900-01-01'  
and convert(datetime,ReturnDate,120)>='2012-11-01' 
and convert(datetime,ReturnDate,120)<='2012-11-28'

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧