【SQL语句】-范围查询

【SQL语句】-范围查询,第1张

BETWEEN *** 作符

*** 作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是 数值、文本或者日期

select 字段名  from  表名  where  字段名  between  值1  and  值2

在处理数值时:

在 Mysql 中使用 between and 包含边界值,即闭区间内;

在处理文本时:

在日常处理数据时,between and的用法基本都是处理数值或者日期格式,处理字符串类型用between and 意义不大

在处理时间日期时,

在 Mysql 中使用 between and 不包含右边界数据,例如:

SELECT * FROM log_info WHERE add_time BETWEEN '2020-08-04' and '2020-08-09'

查询出来的数据并不会包含 2020-08-09 的数据,因为 Mysql 对日期的查询是默认 00:00:00,所以上面的时间实际是:2020-08-04 00:00:00 至 2020-08-09 00:00:00,2020-08-09 当天的数据不在区间内,所以查询不到。

解决方法

将右边界日期往后推一天,如 2020-08-04 - 2020-08-10;

将右边界时间精确到秒,如 2020-08-04 - 2020-08-09 23:59:59;

以上问题只会在字段类型为 datetime 中出现,Mysql 本身是包含边界的,但如果字段类型为 datetime 时,数据将会被转换为 2020-08-04 00:00:00,而数据类型为 date 则不会出现上述问题。

那么如何范围查询内的文本信息呢?

使用in

-- 条件查询-范围查询: in(条件1,条件2) :表示在某个不连续的范围内

select * from goods where goods_company in('淘宝','Tmall')

建议这种情况下,可以只查询部分内容即可。可以用limit方法进行限制查询条数的多少。

举例:

select * from tablename//此时查询的是所有的记录,用时可能比较多。

select * from tablename limit 20,40//这样就只会查询出需要的第20条到40条。

备注:除了此优化外,可以只查询需要的字段,还可以增加其余的一些where条件,来减少数据查询的压力。

可以了解一下MySQL的时间戳(Timestamp)数据类型:

默认时间戳(Timestamp)类型的取值范围为'1970-01-01 00:00:01' UTC至'2038-01-19 03:14:07' UTC,数据精确到秒级别,该取值范围包含约22亿个数值,因此在MySQL内部使用4个字节INT类型来存放时间戳数据:

1、在存储时间戳数据时,先将本地时区时间转换为UTC时区时间,再将UTC时区时间转换为INT格式的毫秒值(使用UNIX_TIMESTAMP函数),然后存放到数据库中。

2、在读取时间戳数据时,先将INT格式的毫秒值转换为UTC时区时间(使用FROM_UNIXTIME函数),然后再转换为本地时区时间,最后返回给客户端。

(Timestamp)时间戳列可以有四张组合定义,其含义分别为:

1、当字段定义为timestamp,表示该字段在插入和更新时都不会自动设置为当前时间。

2、当字段定义为timestamp DEFAULT CURRENT_TIMESTAMP,表示该字段仅在插入且未指定值时被赋予当前时间,再更新时且未指定值时不做修改。

3、当字段定义为timestamp ON UPDATE CURRENT_TIMESTAMP,表示该字段在插入且未指定值时被赋值为"0000-00-00 00:00:00",在更新且未指定值时更新为当前时间。

4、当字段定义为timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,表示该字段在插入或更新时未指定值,则被赋值为当前时间。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8328063.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存