[最优解释] 试试: if @starttime is null select * from All_orders where ship=isnull(@ship,ship) and company=isnull(@company,company) and trade=isnull(@trade,trade) if @starttime is null select * from All_orders where ship=isnull(@ship,ship) and company=isnull(@company,company) and trade=isnull(@trade,trade) and orders_datetime between @starttime and @endtime
select * from All_Orders where ship=isnull(@ship,ship) and company=isnull(@company,company) and trade=isnull(@trade,trade) and starttime=isnull( @starttime,starttime)and endtime=isnull( @endtime ,endtime)
go [其他解释] 以前经常有if判断然后动态拼接的。 现在发哥这种就可以了,用isnull判断一下,为null的就不用处理了。 当然这样的话,如果没有传这个条件,而数据中又是null值的数据是取不出来的。 [其他解释]
这里面的@starttime 、@endtime 应该是 orders_datetime between @starttime and @endtime 查询两个时间段时间的数据
这里面的@starttime 、@endtime 应该是 orders_datetime between @starttime and @endtime 查询两个时间段时间的数据 [其他解释] 那要先知道你的业务,如果不传你默认如何解决?我假设一下,如果都不穿,那么默认starttime为1900-01-01,endtime为表里最大的orders_datetime,如果这样的话,那isnull(starttime,'1900-01-01') and isnull(@endtime,@maxtime)
相当于需要有4个查询条件,而且这4个查询条件是任意交互的,不能确定哪一个为空,有可能是ship 和company ,也有可能是ship 和 company 和 starttime 等等方式,所以上面我说如果用if来拼接的话 是15个if。
如果是这种情况 必须要用15个if连接吗? ~ 苦恼了很长时间。虽然我现在用的是15个连接拼法,但是保不准以后用5个条件 甚至更多,如果用if连接的话 那可就连多啦·····发哥。。求助啊 [其他解释] 那你其实可以仅仅考虑是否有日期,这样只需要一次if/else [其他解释] 哦? if @starttime ='' select * from All_orders where ship=isnull(@ship,ship) and company=isnull(@company,company) and trade=isnull(@trade,trade) if @starttime !='' select * from All_orders where ship=isnull(@ship,ship) and company=isnull(@company,company) and trade=isnull(@trade,trade) and orders_datetime between @starttime and @endtime
这样嘛
[其他解释] 这样达不到那种要求啊。执行结果和15个if 拼接 出来的结果不一样。 [其他解释] 可算是弄出来 ,是以前的一个同学给我方法(ship=@ship or @ship is null or @ship ='') 这种方法。。非常感谢发哥的思路~~~~ 结贴~