获取两个月到两个给定年份之间的 sql 数据

Posted

技术标签:

【中文标题】获取两个月到两个给定年份之间的 sql 数据【英文标题】:fetch sql data between two month and two given year 【发布时间】:2017-08-11 04:39:42 【问题描述】:

我想从 2014 年 6 月到 2016 年 4 月之间的表中获取数据。 但这不会返回任何值这是什么解决方案..

【问题讨论】:

欢迎来到 ***。请阅读How to Ask。对于初学者,请不要包含代码或数据的图像。相反,请在此处复制并粘贴您的代码或数据。它们毫无用处,尤其是当有人在响应中重新输入所述代码/数据时。 【参考方案1】:

向您的查询显示您尝试过的内容,否则

尝试使用 BETWEEN 查询。

SELECT * FROM table_name WHERE (month BETWEEN 4 AND 6) AND (year BETWEEN 2014 AND 2016);

【讨论】:

这工作正常,但是当我改变 4 和 6 的位置时..然后显示空行。 SELECT * FROM usr_hired_duration WHERE (month BETWEEN 6 AND 4 ) AND (year BETWEEN 2014 AND 2016) 这行不通。因为第一个条件不成立。并且您需要了解两者之间的作用...BETWEEN 返回的值在给定范围内。 BETWEEN 是 >= AND 不会返回 2015 年 11 月的日期。【参考方案2】:

需要查看您首先尝试的查询。但试试这个。

 select *
 from table
 where datecolumn >= '2014-06-01' and datecolumn <= '2016-04-01'

【讨论】:

谢谢,但这不起作用。我没有得到想要的结果。【参考方案3】:

添加年 * 100 和月以获得格式为 YYYYMM 的整数值:

select *
from tablename
where (year * 100 + month) between (2014 * 100 + 4) and (2016 * 100 + 6)

或者,如果您的 dbms 支持行和表构造函数

select *
from tablename
where (year, month) between (2014, 4) and (2016, 6)

【讨论】:

【参考方案4】:

我使用以下 SQL 查询从表中选择两个选定月份和两个给定年份之间的数据。

SELECT * FROM usr_hired_duration where STR_TO_DATE(CONCAT(year,'-',LPAD(month,2,'01'),'-',LPAD(payment_date,2,'01')), '%Y-%m-%d') BETWEEN STR_TO_DATE(CONCAT(2014,'-',LPAD(03,2,'01'),'-',LPAD(01,2,'01')), '%Y-%m-%d') AND STR_TO_DATE(CONCAT(2016,'-',LPAD(06,2,'01'),'-',LPAD(01,2,'01')), '%Y-%m-%d')

【讨论】:

与我的第一个查询类似,但可能较慢,因为执行了很多转换。看看我的第二个查询,它很可能会胜过这个查询和我的第一个查询。

以上是关于获取两个月到两个给定年份之间的 sql 数据的主要内容,如果未能解决你的问题,请参考以下文章

SQL查询选择年份在两个日期之间的行

sql server 中两个日期之间的年份以及每个日期在 sql server 中的开始和结束日期

如何获取带有年份的月份名称和两个日期之间的年份列表

SQL Server 2008 仅在月份和年份之间选择数据

SQL Server 2012 中的年份计算

sql中如何提取从数据库中所获得时间的年份