vb查询时要查大于,小于,或等于某个时间的数据,该怎么写代码

嗯……就这样了……2 02 2 年了,我还在搞这个SQL语句……尤其是某些地方……挺麻烦的。

首先,选择一个大于某个时间的时间...例如... sql 从 sales_data 中选择 where order_time > cdate('2 02 2 -1 2 -2 5 1 4 :3 0:00')
注意时间格式必须是'XXXX-XX-XXYY:YY:YY'...不能搞乱,否则会出错。

第二,选择一个小于某个时间的时间...比如... sql 从 sales_data 中选择 where order_time < cdate>这个也是一样的。
时间格式必须是‘XXXX-XX-XXYY:YY:YY’……这个比较死板。

第三种,像模糊查询...这个就灵活多了...比如... sql 从 sales_data 中选择 其中 order_time 像“%2 02 2 %”
或... sql 从 sales_data 中选择 其中 order_time 像“%2 02 2 -1 2 %”
或... sql 从 sales_data 中选择 其中 order_time 就像 '%1 4 :3 0%'
它甚至可以是特定的秒... sql 从 sales_data 中选择 where order_time Like '%1 4 :3 0:00%'
这个'SHJ'变量可以是年,或者年月,或者年月日,或者时分,或者时分秒……格式不固定。

当时就很迷茫...搞了好久...可能是我比较极端,觉得这种日期格式处理...太麻烦了。

SQL中between的用法是什么 范围查询的边界值处理技巧

让我告诉你这中间的事。
那个时候我真的就成了傻子了。

前年,我在北京做一个电子商务项目。
我检查了一个名为 Orders 的表,我必须找到特定时间段内的订单。
使用BETWEEN,这样写:
sql 选择订单 ID、订单日期 来自订单 其中 order_date 介于“2 02 3 -01 -01 ”和“2 02 3 -01 -3 1 ”之间;
结果?出了点问题。
有的订单在月底2 3 :5 9 :5 9 卡住了,这些记录都被遗漏了。
为什么?因为两者之间是有界限的,但当时间介入时,事情就会变得混乱。

下一步该做什么?我想直接使用 >= 和 < 来理解会更好,这肯定会涵盖所有内容:
sql 选择订单 ID、订单日期 来自订单 WHERE order_date >= '2 02 3 -01 -01 ' AND order_date < '2 02 3 -02 -01 ';
嘿,现在正是时候。
想一想,如果数据库也支持系统功能等的话,使用DATE_ADD添加一天会更安全。

还有一件事。
前年,我在上海做另一个项目,遇到了字符串排序的问题。
表中有类别字段,查看某个类别:
sql 选择产品 ID、类别 来自产品 其中范围在“A”和“F”之间;
结果?返回的顺序是错误的,因为字符串是按字典顺序排序的,并且“c”可能位于“f”之前。
这实际上取决于数据库的组织方式。
最后测试了一些值,发现MySQL是这样的,只好重写:
sql 选择产品 ID、类别 来自产品 其中类别 >= 'A' 且类别 <= 'F';
这是正确的。
你真的需要它必须尝试,不应该掉以轻心。

然后是中间的一个,去年在上海的另一个项目中使用过。
检查价格是否在 1 0 到 2 0 之间:
sql 选择产品名称、价格 来自产品 价格不在 1 0 到 2 0 之间的;
这没有什么问题,只是不要取任何等于极限值的东西。
我提醒自己,不要忘记极限值。
业务上有时候,想要更精确,就得重写:
sql 选择产品名称、价格 来自产品 其中价格 < 1> 2 0;
最后,还有性能。
前年的orders表数据量不大,但查多了就会卡住。
我正在考虑添加索引。
就像这样:
sql 在订单上创建索引 idx_order_date(order_date);
添加索引后,仔细检查:
sql 选择订单 ID、订单日期 来自订单 WHERE order_date >= '2 02 3 -01 -01 ' AND order_date < '2 02 3 -02 -01 ';
显然很快。
你可以在不添加索引的情况下再试一次,运行EXPLAIN可以看到:
sql 解释选择 order_id, order_date 来自订单 其中 order_date 介于“2 02 3 -01 -01 ”和“2 02 3 -01 -3 1 ”之间;
看看扫描的行数,吓人。
如果索引添加正确的话,数据库会直接访问你关心的范围,这样就省去了你很多麻烦。

总之,BETWEEN非常好用,但要特别注意范围值和时间类型。
数据量大时不能保存索引,否则无法运行。