这种查询条件的SQL语句该怎么写?

字段ipd,ipds(int类型),ipde(int类型)

网段ipd:192.168.1

起始地址ipds:100

结束地址ipde:150

这样可以得到数据192.168.1.100-150

当再添加一段地址范围时,需要查询判断新添加的地址范围是否包含已存在的地址范围

比如查询条件ipd:192.168.1,ipds:151,ipde:200

sql查询语句该怎么写才能判断151-200是否包含了100-150中的任意数字?

比如参数:ipd:192.168.1,ipds:90,ipde:200
90 - 200 和 已存在的100-150 重叠,这样就能查到结果
同理如果参数是 110 -160 同样和也 100-150有重叠,这样也要能查到结果

我的目的是: 如果和已存在的ipds-ipde范围有重叠就能查到记录,没重叠就查不到记录

麻烦大家了,一起帮想想,谢谢

2个回答

思想:151-200不与100-150相交,并不包含100-150,则肯定不会出现俩范围重叠的情况
SELECT
*
FROM
TABLE
WHERE
ipad = 192.168.1
AND (
(151 BETWEEN ipds AND ipde)
OR (200 NOT BETWEEN ipds AND ipde)
OR (151 < ipds AND 200 > ipde)

xingnima07
xingnima07 回复txqq2005: 把OR (200 NOT BETWEEN ipds AND ipde)中的NOT去掉,之前手误了
2 年多之前 回复
txqq2005
txqq2005 你好,你的写法不管参数如何改变,不管重叠或没重叠,都查不到结果
2 年多之前 回复

select * from table where ipad = 192.168.1 and ipds >= 151 and ipde <= 200, 只要查不到就可以了啊

txqq2005
txqq2005 151-200我只是举个例子,如果参数是110-200,这种写法是没用的,一样查不到结果
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问