引言
BETWEEN AND 在生活应用场景
BETWEEN AND 是一种常见的范围查询操作,在现实生活中有着广泛的应用场景:
1. 购物场景
- 价格区间筛选:在淘宝、京东等电商平台上,消费者经常使用"筛选价格在100元到500元之间"的功能,这实际就是BETWEEN 100 AND 500的查询
- 折扣时段购买:超市促销活动常限定"下午3点到6点特价",消费者会在这个时间段内购物
2. 健康管理
- 体温监测:医疗机构判断人体正常体温范围是"36.1°C到37.2°C之间(BETWEEN 36.1 AND 37.2)"
- 血压标准:正常血压范围是"收缩压90到120mmHg,舒张压60到80mmHg之间"
3. 时间管理
- 会议安排:公司会议可能安排在"上午10点到12点之间(BETWEEN 10:00 AND 12:00)"
- 营业时间:餐厅营业时间显示"11:30-21:30",即BETWEEN 11:30 AND 21:30
4. 年龄相关
- 儿童票标准:游乐园规定"身高1.2米到1.5米之间(BETWEEN 1.2 AND 1.5)可购买儿童票"
- 适龄教育:幼儿园招生范围是"3到6周岁儿童"
5. 财务规划
- 预算控制:家庭月支出计划控制在"5000到8000元之间(BETWEEN 5000 AND 8000)"
- 投资收益:理财产品预期收益率在"4.5%到6.8%之间"
6. 运动健身
- 心率区间:有氧运动建议保持心率在"最大心率的60%到80%之间"
- 训练组数:健身计划可能包括"每组重复8到12次动作"
BETWEEN AND 在《原神》中的应用场景
在《原神》中,BETWEEN AND
通常指游戏内的时间或数值范围筛选,尤其在任务、活动或角色培养中需要满足特定条件时使用。以下是具体应用场景:
时间范围筛选
游戏中的部分任务或活动要求玩家在特定时间段内完成,例如每日委托或限时活动。使用 BETWEEN AND
可以快速筛选出符合时间条件的任务。
-- 示例:查询当前时间段内可接取的限时任务
SELECT * FROM events
WHERE start_time BETWEEN '2023-10-01 00:00:00' AND '2023-10-07 23:59:59';
数值范围筛选
角色属性、武器伤害或材料数量等数值可能需要满足一定范围。例如,筛选攻击力在特定区间内的角色:
-- 示例:筛选攻击力在 1500 到 2000 之间的角色
SELECT character_name, attack_power FROM characters
WHERE attack_power BETWEEN 1500 AND 2000;
地图坐标范围
在探索地图时,可能需要定位某个区域内的资源点或怪物。使用坐标范围筛选:
-- 示例:查询璃月地区特定坐标范围内的矿物资源
SELECT resource_name, x_coordinate, y_coordinate FROM map_resources
WHERE x_coordinate BETWEEN 100 AND 200
AND y_coordinate BETWEEN 300 AND 400;
实际游戏中的类似逻辑
虽然《原神》本身不直接使用 SQL 查询,但游戏内系统(如任务日志、成就追踪)会隐含类似逻辑。例如:
- 每日委托刷新时间:系统自动在凌晨 4 点到次日凌晨 4 点间刷新任务。
- 活动开放周期:限时活动仅在
BETWEEN
开始和结束日期之间开放。
玩家可通过游戏内的筛选功能(如角色属性面板、地图标记)间接实现类似效果。
数据查询-BETWEEN AND
你看见区别没!
# 简单查询 在表中某个数据范围查询
# SELECT * FROM 表名 WHERE 列名 BETWEEN 值1 AND 值2;
# 示例:原神武器突破材料使用多少
#SELECT * FROM 原神武器突破材料 WHERE 使用数量 BETWEEN 1 AND 5;
use DataQueryStudy;
# 创建表 原神武器突破材料表
create table GenshinWeaponAscensionMaterials (
id INT PRIMARY KEY COMMENT '武器突破材料ID',
weapon_type varchar(100) COMMENT'武器类型',
weapon_name VARCHAR(100) COMMENT '武器名称',
material_name VARCHAR(100) COMMENT '材料名称',
quantity_used INT COMMENT '使用数量',
weapon_level INT COMMENT '突破的武器等级'
);
# 添加 突破副本材料
insert into GenshinWeaponAscensionMaterials values(1,'弓箭','神射手之誓','凛风奔狼的始龀',3,20);
insert into GenshinWeaponAscensionMaterials values(2,'弓箭','神射手之誓','凛风奔狼的裂齿',2,40);
insert into GenshinWeaponAscensionMaterials values(3,'弓箭','神射手之誓','凛风奔狼的裂齿',4,50);
insert into GenshinWeaponAscensionMaterials values(4,'弓箭','神射手之誓','凛风奔狼的断牙',2,60);
insert into GenshinWeaponAscensionMaterials values(5,'弓箭','神射手之誓','凛风奔狼的断牙',4,70);
insert into GenshinWeaponAscensionMaterials values(6,'弓箭','神射手之誓','凛风奔狼的怀乡',3,80);
insert into GenshinWeaponAscensionMaterials values(7,'弓箭','祭礼弓','凛风奔狼的始龀',3,20);
insert into GenshinWeaponAscensionMaterials values(8,'弓箭','祭礼弓','凛风奔狼的裂齿',3,40);
insert into GenshinWeaponAscensionMaterials values(9,'弓箭','祭礼弓','凛风奔狼的裂齿',6,50);
insert into GenshinWeaponAscensionMaterials values(10,'弓箭','祭礼弓','凛风奔狼的断牙',3,60);
insert into GenshinWeaponAscensionMaterials values(11,'弓箭','祭礼弓','凛风奔狼的断牙',6,70);
insert into GenshinWeaponAscensionMaterials values(12,'弓箭','祭礼弓','凛风奔狼的怀乡',4,80);
insert into GenshinWeaponAscensionMaterials values(13,'弓箭','天空之翼','凛风奔狼的始龀',5,20);
insert into GenshinWeaponAscensionMaterials values(14,'弓箭','天空之翼','凛风奔狼的裂齿',5,40);
insert into GenshinWeaponAscensionMaterials values(15,'弓箭','天空之翼','凛风奔狼的裂齿',9,50);
insert into GenshinWeaponAscensionMaterials values(16,'弓箭','天空之翼','凛风奔狼的断牙',5,60);
insert into GenshinWeaponAscensionMaterials values(17,'弓箭','天空之翼','凛风奔狼的断牙',9,70);
insert into GenshinWeaponAscensionMaterials values(18,'弓箭','天空之翼','凛风奔狼的怀乡',6,80);
#查询20到50武器等级突破副本材料 BETWEEN and
select *from GenshinWeaponAscensionMaterials where weapon_level between 20 and 50;
#错误的示范 为什么呢
select *from GenshinWeaponAscensionMaterials where weapon_name between '祭礼弓' and '天空之翼';
从 GenshinWeaponAscensionMaterials 表中查询 weapon_name 字段值在 ‘祭礼弓’ 和 ‘天空之翼’ 之间的所有记录。这里使用了 BETWEEN … AND … 语法。
错误原因分析:
- BETWEEN 用于字符串时的行为 BETWEEN … AND … 在字符串类型字段上比较时,实际上是按照字符串的字典序(即字符编码顺序)进行比较的,而不是按照你期望的“武器顺序”或“逻辑顺序”。比如,‘祭礼弓’ 和 ‘天空之翼’ 在字典序上的排列可能与你想象的不同,导致查询结果不符合预期。
- *中文排序的特殊性 中文字符串的排序依赖于数据库的排序规则(collation)。不同的排序规则可能导致相同的 SQL 在不同数据库中返回不同的结果。如果排序规则不是你期望的中文拼音排序,结果可能更加不可控。
#3. BETWEEN 包含边界值 BETWEEN 是闭区间,包含起始和结束值本身。如果你的 weapon_name 字段中正好有 ‘祭礼弓’ 或 ‘天空之翼’,它们也会被包含在结果中。
总结建议: 如果你想查询特定的武器名称,建议使用 IN
语句,例如:
select * from GenshinWeaponAscensionMaterials where weapon_name in ('祭礼弓', '天空之翼');
如果确实需要区间查询,建议先明确排序规则,并确保区间的起止值能准确表达你的需求。否则,BETWEEN 用于字符串时容易产生歧义和错误结果。