获取两个月到两个给定年份之间的 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 数据的主要内容,如果未能解决你的问题,请参考以下文章