Oracle 带日期的between和like函数

Oracle 带日期的between和like函数,oracle,sql-like,between,Oracle,Sql Like,Between,我在下面运行了这两个脚本,它们给出了两个不同的结果。第一个数据不包括4月30日的数据,但后者包括。我正在使用oracle sql。有人能帮忙吗 select distinct * from a where (m_date between'01-MAY-17' AND '30-MAY-17'); select distinct * from a where m_date like '%-MAY-17'; 我使用了to_date函数,它起了作用: 从“2017年5月1日”和“2017年5月30日

我在下面运行了这两个脚本,它们给出了两个不同的结果。第一个数据不包括4月30日的数据,但后者包括。我正在使用oracle sql。有人能帮忙吗

select distinct * from a where (m_date between'01-MAY-17' AND '30-MAY-17');

select distinct * from a where m_date like '%-MAY-17';

我使用了to_date函数,它起了作用:

从“2017年5月1日”和“2017年5月30日”之间的“截止日期”(m_date)中选择不同的*

这产生了与like子句相同的结果:

从where m_日期中选择distinct*,如“%-MAY-17”

您的BEVERY子句

select distinct * from a where to_date (m_date) between'01-MAY-17' AND '30-MAY-17'
与say(伪代码)相同

其中不包括5/30的日期值,其中存在除上午12点以外的任何时间元素。(同样,五月也有31天)

假设m_date是一种日期数据类型,并且假设您希望所有值都在5月份,那么执行以下操作更为正确

... where m_date >= to_date('01-may-17') and m_date < to_date('01-jun-17')...
。。。其中m_日期>=截止日期(“2017年5月1日”)和m_日期<截止日期(“2017年6月1日”)。。。

MU date的数据类型是什么?如果它是一个日期,请注意,您正在这里进行从字符串到日期的隐式转换。如果2017年5月30日
'30'
被正确转换为日期值,则
between
表达式将匹配时间为5月30日
00:00
(午夜)的任何行,但不匹配该点之后的任何日期时间值。如果是日期,不要像那样使用
。如果是字符串,请考虑将其转换为日期。不要使用字符串函数来进行日期比较。Oracle内置了对日期和时间的支持,这些功能非常强大,将来将更好地为您服务。
... where m_date >= to_date('01-may-17') and m_date < to_date('01-jun-17')...