sql 存储过程参数为空则不作为条件
/****** Object: StoredProcedure [dbo].[GetCommonGroupByRegion] Script Date: 03/23/2017 17:31:18 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO ALTER proc [dbo].[GetCommonGroupByRegion]
@CarCategory varchar(50)=null,---车型
@CreateTimeStart datetime=null, --入会开始时间
@CreateTimeEnd datetime=null, --入会结束时间
@AuthenticationTimeStart datetime=null, --认证开始时间
@AuthenticationTimeEnd datetime=null, --认证结束时间
@BuyTimeStart datetime=null, --购车开始时间
@BuyTimeEnd datetime=null --购车结束时间 as
begin DECLARE @strPC VARCHAR(2000), @strAPP VARCHAR(2000), @strWX VARCHAR(2000), @strWAP VARCHAR(2000)
---------------------pc start
SET @strPC = ( SELECT DISTINCT STUFF(
( SELECT ','''+ qudao+'''' FROM CreatedType WITH ( NOLOCK )
WHERE qtype = 'pc' ORDER BY qudao
FOR XML PATH('')), 1,4, '') AS jzhw
FROM CreatedType t)
set @strPC= left(@strPC,len(@strPC)-1)
-------------------------pc end***********
------------------------app start
SET @strAPP = ( SELECT DISTINCT STUFF(
( SELECT ','''+ qudao+'''' FROM CreatedType WITH ( NOLOCK )
WHERE qtype = 'app' ORDER BY qudao
FOR XML PATH('')), 1,4, '') AS jzhw
FROM CreatedType t)
set @strAPP= left(@strAPP,len(@strAPP)-1)
------------------------- app end *******
------------------------wx start
SET @strWX = ( SELECT DISTINCT STUFF(
( SELECT ','''+ qudao+'''' FROM CreatedType WITH ( NOLOCK )
WHERE qtype = 'wx' ORDER BY qudao
FOR XML PATH('')), 1,4, '') AS jzhw
FROM CreatedType t)
set @strWX= left(@strWX,len(@strWX)-1)
------------------------- wx end *******
------------------------wap start
SET @strWAP = ( SELECT DISTINCT STUFF(
( SELECT ','''+ qudao+'''' FROM CreatedType WITH ( NOLOCK )
WHERE qtype = 'wap' ORDER BY qudao
FOR XML PATH('')), 1,4, '') AS jzhw
FROM CreatedType t)
set @strWAP= left(@strWAP,len(@strWAP)-1)
------------------------- wap end *******
select
c.CarCategory as '车型',
d.Region as '区域',
COUNT(case when a.CreatedPerson like '%D%' and len(a.CreatedPerson)=5 then a.Id else null end ) as '经销商',
COUNT(case when a.CreatedPerson in( @strPC) then a.Id else null end ) as '网站', COUNT(case when a.CreatedPerson in(@strAPP) then a.Id else null end ) as 'APP', COUNT(case when a.CreatedPerson in(@strWX) then a.Id else null end ) as '微信', COUNT(case when a.CreatedPerson in( @strWAP) then a.Id else null end ) as 'wap'
from
Membership a
left join IF_Customer b on a.IdentityNumber=b.IdentityNumber
left join IF_Car c on b.CustId=c.CustId
left join CS_CarDealerShip d on c.DealerId=d.DealerId
where
a.IsDel=0 --case when @CreateTimeStart is not null then and a.CreateTime>@CreateTimeStart else null end
--and ( (@CreateTimeStart is not null and @CreateTimeStart!='') and (a.CreateTime>@CreateTimeStart) )
--and ( (@CreateTimeEnd is not null and @CreateTimeEnd!='') and (a.CreateTime<=@CreateTimeEnd) ) and (a.CreateTime>=@CreateTimeStart or @CreateTimeStart is null)
and (a.CreateTime<=@CreateTimeEnd or @CreateTimeEnd is null) --and ( (@AuthenticationTimeStart is not null and @AuthenticationTimeStart!='') and (a.AuthenticationTime>@AuthenticationTimeStart) )
--and ( (@AuthenticationTimeEnd is not null and @AuthenticationTimeEnd!='') and (a.AuthenticationTime<=@AuthenticationTimeEnd) ) and (a.AuthenticationTime>=@AuthenticationTimeStart or @AuthenticationTimeStart is null)
and (a.AuthenticationTime<=@AuthenticationTimeEnd or @AuthenticationTimeEnd is null) --and ( (@CarCategory is not null and @CarCategory!='') and (c.CarCategory=@CarCategory) )
and (c.CarCategory=@CarCategory or @CarCategory is null ) --and ( (@BuyTimeStart is not null and @BuyTimeStart!='') and ( c.BuyTime>@BuyTimeStart) )
--and ( (@BuyTimeEnd is not null and @BuyTimeEnd!='') and ( c.BuyTime<=@BuyTimeEnd) ) and (c.BuyTime>=@BuyTimeStart or @BuyTimeStart is null)
and (c.BuyTime<=@BuyTimeEnd or @BuyTimeEnd is null) and d.Region<>''
and d.Region<>'-'
group by c.CarCategory, d.Region
; end
解析: and (c.BuyTime<=@BuyTimeEnd or @BuyTimeEnd is null)
首先 and 条件后面是括号,那就说明括号 是一个整体, 括号里面 用的 or 语法,也就说明只要任意一个条件满足就ok, 当参数为空的时候,假如作为条件的字段是时间格式的,如果做大小比较肯定会失败,这个时候后面的 or的条件满足了,就把前面的给忽略了,其实这个时候就相当于 and 1=1 了,
sql 存储过程参数为空则不作为条件的更多相关文章
- sql 存储过程参数是表类型,数据库中如何调用
DECLARE @NEW_STUDENT as [CancelLendersContent] INSERT @NEW_STUDENT VALUES (0,0,0,'12345678912','张三', ...
- 六、SQL语句进行多条件查询,并解决参数为空的情况
一.SQL语句进行多条件查询,并解决参数为空的情况 QueryEntity query; var whereSql = new StringBuilder("Where 1=1") ...
- SQL Server 存储过程中处理多个查询条件的几种常见写法分析,我们该用那种写法
本文出处: http://www.cnblogs.com/wy123/p/5958047.html 最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫,不知道各种 ...
- 在论坛中出现的比较难的sql问题:14(存储过程问题 存储过程参数、存储过程内的参数)
原文:在论坛中出现的比较难的sql问题:14(存储过程问题 存储过程参数.存储过程内的参数) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的 ...
- 在SQL存储过程中给条件变量加上单引号
在SQL存储过程中给条件变量加上单引号,不加语句就会出问题,以下就是在存储过程中将条件where设置成了动态变化的,给where赋完值再和前面的语句拼接,再execute(SQL) ), )), )+ ...
- FineReport: 参数为空选出全部值(按条件查询,空条件时直接过滤,不进行查询。。)
在Java报表软件FineReport中,选择特定的参数(如下图中的姓名.身份证号等)后,会返回我们要查询的数据,然而假如没有输入参数值,我们却仍需要返回数据时该怎样处理呢?应该过滤掉这个条件,不按这 ...
- sql 解析字符串添加到临时表中 sql存储过程in 参数输入
sql 解析字符串添加到临时表中 sql存储过程in 参数输入 解决方法 把字符串解析 添加到 临时表中 SELECT * into #临时表 FROM dbo.Func_SplitOneCol ...
- SQL 存储过程 多条件 分页查询 性能优化
最优化查询代码 -- 注意:此处可能会出现 字符串过长问题,所以 必要的情况下请分段处理 set @sql1 =' SELECT * FROM ( select ROW_NUMBER() OVER(O ...
- PL/SQL存储过程编程
PL/SQL存储过程编程 /**author huangchaobiao *Email:huangchaobiao111@163.com */ PL/SQL存储过程编程(上) 1. Oracle应用编 ...
随机推荐
- oracle表查询优化
ORACLE有个高速缓冲的概念,这个高速缓冲就是存放执行过的SQL语句,那oracle在执行sql语句的时候要做很多工作,例如解析sql语句,估算索引利用率,绑定变量,读取数据块等等这些操作.假设高速 ...
- java使用代理发post请求
这东西啊,本身是无用的,但是要是移植就有用. package util; import java.util.Properties; public class HttpProxyConfiger { p ...
- C++笔试面试题整理
朋友给出的一些常见的C++面试题,特整理如下,后期遇到新的再更新. 面试题 列举并解释C++中的四种运算符转化,说明它们的不同点: static_cast: 在功能上基本上与C风格的类型转换一样强大, ...
- Houdini技术体系 基础管线(四) :Houdini驱动的UE4植被系统 上篇
背景 之前在<Houdini技术体系 过程化地形系统(一):Far Cry5的植被系统分析>一文中已经对AAA游戏中过程化植被的需求有了一定的定义,后续工作就是如何用Houdini开发功能 ...
- IIS 配置详解 请求长度限制调整
当上传一个超过30M的文件时,服务器会重定向至404.13页面,报错如下: HTTP Error 404.13 - Not Found The request filtering module is ...
- PXE:终于成功启动 fedora live 了!
default menu.c32 timeout 1 label fedora29-live menu label fedora29-live from ftp kernel fedora29live ...
- oracle 子查询中null的问题(in 和 not in)
这里的in后面的句子可以理解为or拼接,简单举例即 in (9566,9839,null)可以等价于mgr=9566 or mgr=9839 or mgr=null, not in (9566,983 ...
- 【中间件安全】Jboss安全加固规范
1. 适用情况 适用于使用Jboss进行部署的Web网站. 适用版本:5.x版本的Jboss服务器 2. 技能要求 熟悉Jboss安装配置,能够Jboss进行部署,并能针对站点使用Jboss进行安全加 ...
- 我的预约订单页面List
<%@ page language="java" contentType="text/html;charset=UTF-8"%> <%@ ta ...
- jstat命令详解
Jstat是JDK自带的一个轻量级小工具.全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令 ...