简单 sql 语句求解答。。大能在哪里。。。
select * from dbo.T_Money as tm
where
(
CONVERT(varchar(10), tm.[datetime],120)>=CONVERT(varchar(10),'@starttime',120) or
CONVERT(varchar(10), tm.[datetime],120)<=CONVERT(varchar(10),'@endtime',120)
)
AND (tm.creater='' or tm.creater like '%'+ '' +'%')
当or 为and 的时候:
当@starttime 为'',空的时候
当@endtime 为'' , 空的时候。
(查询不出来数据,我知道是条件不满足查询不出来)
当为or 的时候输入条件就没用。感觉数据还是全部查出来了。。
但是,我想要的是 当@starttime 和 @endtime 为空的时候就查询全部的数据,
当有一个时间的条件时,数据就按照那一个时间来查询。 当然有两个时间就按照开始结束时间来查询。
求解答。。。。求高手。。。
------解决方案--------------------你可以给变量赋个默认值,
这样就不用在这里纠结了
------解决方案--------------------或者语句前面判断一下 如果为'' 则 set @starttime='1900-01-01'
set @endtime='9999-12-31'
------解决方案----------------------假设你的@starttime和@endtime是字符串
select * from dbo.T_Money as tm where
(@starttime is not null and @starttime <> '' and datediff(dd,@starttime,tm.[datetime]) > 0) or
(@endtime is not null and @endtime <> '' and datediff(dd,tm.[datetime],@endtime) >= 0) or
((@starttime is null or @starttime = '') and (@endtime is null or @endtime = '') and (tm.creater = '' or tm.creater is null))
--如果当@starttime 和 @endtime 为空,你是查询全部的数据,貌似应该为如下:
select * from dbo.T_Money as tm where
(@starttime is not null and @starttime <> '' and datediff(dd,@starttime,tm.[datetime]) > 0) or
(@endtime is not null and @endtime <> '' and datediff(dd,tm.[datetime],@endtime) >= 0) or
((@starttime is null or @starttime = '') and (@endtime is null or @endtime = '') and (1 = 1))