首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从范围多选择筛选经验的TSQL

从范围多选择筛选经验的TSQL
EN

Stack Overflow用户
提问于 2015-09-10 16:42:45
回答 1查看 72关注 0票数 0

“我的表”包含经验字段,它是一个整数。我的页面包含一个复选框列表,比如0-3,3-7,7-9,9-12,12-15,15+,我必须使用select查询从表中筛选这一点,我尝试过between,但是当选择的多个字段都可以帮助时,它就不能工作了。

我的桌子结构就像

代码语言:javascript
运行
复制
Name    Experience in year
----    ---------
a          1
b          2
c          3
d          5
e          2
f          1

我的数据库参数是varchar字符串。

代码语言:javascript
运行
复制
if we select 0-3years then  '0-3' 
if we select 3-6years then  '3-6' 
if we select both  then  '0-3,3-6' 
if we select 0-3years and 9-12years then '0-3,9-12'

现在我用这些格式发送数据,我不知道这是一个好方法,请告诉我更好的方法

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-10 17:43:59

首先,您需要一个表checkRanges

代码语言:javascript
运行
复制
CREATE TABLE checkRanges
    ([checkID] int, [name] varchar(8), [low] int, [upper] int);

INSERT INTO checkRanges
    ([checkID], [name], [low], [upper])
VALUES
    (1, '0-3', 0, 2),
    (2, '3-6', 3, 5),
    (4, '6-9', 6, 8),
    (8, '9-12', 9, 11),
    (16, '12+', 12, 999)

看到checkID是怎样的2的幂吗?

在您的应用程序中,如果用户选择3-69-12,则将2+8 = 10发送到数据库。如果您使用db信息创建复选框,也将是很棒的。

在db中,您可以按位比较来选择正确的范围。然后在每一个范围之间穿行。

代码语言:javascript
运行
复制
WITH ranges as (
    SELECT *
    FROM checkRanges
    where checkID & 10 > 0
)
SELECT *
FROM users u
inner join ranges r
   on u.Experience between r.low and r.upper

一起看吧,SQL Fiddle Demo,我包括了更多的用户。您只需更改clausule where checkID & 10 > 0来测试其他组合。

注:

我更新范围。将上值更改为value - 1,因为between是包含性的,可能会产生重复的结果。

如果要使用旧版本,则必须将联接句中的betwewen替换为

代码语言:javascript
运行
复制
u.Experience >= r.low and u.Experience *<* r.upper
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32507413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档