简单实现多条件查询
我们在开发过程中,特别是数据库系统的开发中经常会遇到多条件的查询状况。例如:查询某一个部门某个时间段的车辆费用支出,这就涉及到多条件查询。其实多条件查询的方法有很多种,有些写法是比较烦琐,效率也不高,比如一个条件一个条件去if—else判断拼凑sql语句。我在这里使用一种个人觉得写法简单,理解也比较简单的方法:
CREATE PROCEDURE
[dbo].[usp_GetFeeInfo]
@Number nvarchar(50) = null,
--车牌号
@Unit nvarchar(50) = null, --部门
@FeeType
nvarchar(50) = null, --费用类型
@StartDate datetime = null,
--查询的起始时间
@EndDate datetime = null
--查询的结束时间
AS
BEGIN
select
f.ID,
f.Number,
f.[Type],
f.FeeDate,
round(f.[Money],2)
as [Money],
f.Status,
f.Memo,
c.id as
cid,
c.unit1
from Fee f left join Car c
on f.Number =
c.Number
where (f.Number = @Number or @Number is
null) --如果@Number参数为null的话那表示这个字段不在查询的条件中;这可以在程序里简单的实现。
and (c.unit1 =
@Unit or @Unit is null)
and (f.[type] = @FeeType or @FeeType is
null)
and (f.Feedate >= @StartDate or @StartDate is null)
and
(f.Feedate <= @EndDate or @EndDate is null)
order by f.FeeDate
desc
END
程序里面你只要把所有查询条件的值都录入进去。
例如:如果为“全部”的话,那就把这个字段的值设置为:null
CREATE PROCEDURE
[dbo].[usp_GetFeeInfo]
@Number nvarchar(50) = null,
--车牌号
@Unit nvarchar(50) = null, --部门
@FeeType
nvarchar(50) = null, --费用类型
@StartDate datetime = null,
--查询的起始时间
@EndDate datetime = null
--查询的结束时间
AS
BEGIN
select
f.ID,
f.Number,
f.[Type],
f.FeeDate,
round(f.[Money],2)
as [Money],
f.Status,
f.Memo,
c.id as
cid,
c.unit1
from Fee f left join Car c
on f.Number =
c.Number
where (f.Number = @Number or @Number is
null) --如果@Number参数为null的话那表示这个字段不在查询的条件中;这可以在程序里简单的实现。
and (c.unit1 =
@Unit or @Unit is null)
and (f.[type] = @FeeType or @FeeType is
null)
and (f.Feedate >= @StartDate or @StartDate is null)
and
(f.Feedate <= @EndDate or @EndDate is null)
order by f.FeeDate
desc
END
程序里面你只要把所有查询条件的值都录入进去。
例如:如果为“全部”的话,那就把这个字段的值设置为:null