年龄区间查询SQL

年龄区间查询SQL

电子商务 2008-05-13 16:27   阅读94   评论0

一、说明

商品表有两个字段:

最小年龄,最大年龄(其中一个字段可以为空,为空则表示n岁以上,m岁以下)

查询有两个参数:

最小年龄,最大年龄(也可以有一个字段为空,意义同上)

建表与示例数据:

CREATE TABLE [ProductForAgeTest]
(
[PKId] [int]  IDENTITY (1, 1)  NOT NULL,
[ProductCode] [char]  (8) NOT NULL,
[ProductName] [varchar]  (50) NULL,
[ForAgeMin] [int]  NULL,
[ForAgeMax] [int]  NULL,
[IsOnline] [bit]  NULL DEFAULT (1)
)

ALTER TABLE [ProductForAgeTest] WITH NOCHECK ADD  CONSTRAINT [PK_ProductForAgeTest] PRIMARY KEY  NONCLUSTERED ( [PKId] )

SET IDENTITY_INSERT [ProductForAgeTest] ON
INSERT [ProductForAgeTest] ([PKId],[ProductCode],[ProductName],[ForAgeMin],[ForAgeMax],[IsOnline]) VALUES ( 1,'J1501002','遥控仿真童车',4,8,1)
INSERT [ProductForAgeTest] ([PKId],[ProductCode],[ProductName],[ForAgeMin],[IsOnline]) VALUES ( 2,'J1501003','星河战车童车',4,1)
INSERT [ProductForAgeTest] ([PKId],[ProductCode],[ProductName],[ForAgeMax],[IsOnline]) VALUES ( 3,'J1501004','宠物童车',8,1)
SET IDENTITY_INSERT [ProductForAgeTest] OFF

二、查询原理:

看两个区间段是否存在交集,最小年龄或最大年龄为空则视为极限值0-99。

select PKId,ProductCode,ProductName,ForAgeMin,ForAgeMax from ProductForAgeTest where IsOnline=1
go

declare @q_min int
declare @q_max int
--set @q_min=3 set @q_max=5
--set @q_min=4 set @q_max=6
--set @q_min=6 set @q_max=8
--set @q_min=7 set @q_max=9
--set @q_min=5 set @q_max=7
--set @q_min=3 set @q_max=9
--set @q_min=3 set @q_max=4
--set @q_min=8 set @q_max=9
--set @q_min=0 set @q_max=99--全部商品

if(@q_min is null) set @q_min=0
if(@q_max is null) set @q_max=99

select PKId,ProductCode,ProductName,ForAgeMin,ForAgeMax
from ProductForAgeTest
where
IsOnline=1 and
(
(@q_min<=isnull(ForAgeMin,0) and @q_max>isnull(ForAgeMin,0))
or
(@q_min> isnull(ForAgeMin,0) and @q_min<isnull(ForAgeMax,99))
)

--年龄begin---------------------------------------------------------
--不管是产品的年龄,还是查询的年龄,只要为空就置为极限值(0-99)
--(Products.ForAgeMin >= @age_min and Products.ForAgeMin < @age_max)
--OR
--(Products.ForAgeMin <  @age_min and Products.ForAgeMax < @age_min)
--年龄end-----------------------------------------------------------

你可能感兴趣的:(sql,null,table,电子商务,insert,产品)