【SQL语句】-范围查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【SQL语句】-范围查询相关的知识,希望对你有一定的参考价值。

参考技术A 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');

sql 查询时间、日期范围内的数据

有一个表data,里面有两列,一列是时间年月日,例如2012-3-4,一列是日期时分秒,例如09:12:23,怎么查询一个时间日期范围内的数据?例如2012年1月1日 7点之后到2012年1月4日10点之前(2012-1-1 07:00:00 到2012-1-4 10:00:00)的数据?
请给出sql语句,数据库是access数据库

select * from table
where CDate(Format(年月日,"yyyy-mm-dd")+时分秒)>CDate('2012-01-01 19:00:00')
and CDate(Format(年月日,"yyyy-mm-dd")+时分秒)<CDate('2012-01-04 10:00:00')
参考技术A SELECT * 
FROM TableName   
WHERE CONVERT(DATETIME,CONVERT(VARCHAR,日期列) + ' ' +CONVERT(VARCHAR,时间列)) BETWEEN '2012-1-1 07:00:00' AND '2012-1-4 10:00:00'

参考技术B SELECT * FROM TABLE_NAME
WHERE
(COL_1
BETWEEN Format(COL_1, "yyyy-mm-dd")
AND Format(COL_1, "yyyy-mm-dd")
)
AND (COL_2
BETWEEN Format(COL_2, "hh24:mi:ss")
AND Format(COL_2, "hh24:mi:ss")
)
建议将这两个列合并吧,鸡肋
参考技术C 不知道你的是什么数据库?

如果是oralce的话, 可以拼接两个字段.
select * from data where to_date(to_char(nyr, 'yyyy-mm-dd') || ' ' || to_char(sfm, 'hh24:mi:ss'), 'yyyy-mm-dd hh24:mi:ss') between to_date('2012-01-01 07:00:00', 'yyyy-mm-dd hh24:mi:ss') and to_date('2012-01-04 10:00:00', 'yyyy-mm-dd hh24:mi:ss')

没有看到是access的数据库, 呵呵, 抱歉哈. 给这样的一个思路吧.

以上是关于【SQL语句】-范围查询的主要内容,如果未能解决你的问题,请参考以下文章

sql语句怎么描述上个季度的时间范围

sql语句 在一定的时间范围内 连续3天考试都满足 60分 如何写

sql语句查询经纬度范围

sql语句 时间段查询 高分

“sql”语句中“in”怎么用?

用sql语句查询当前日期后一星期内的生日的学生。