答案 0 :(得分:3)
你有点不清楚"之间"意味着在这种情况下。我非常确定datefromparts()
非常有用:
select t.*
from t
where @date_start <= datefromparts(year, month, 1) and
@date_end >= datefromparts(year, month, 1);
如果月末是重要日期,您可能还会发现eomonth()
有帮助。
答案 1 :(得分:0)
您可以尝试使用日期的帮助月(),年()函数
以下是示例:
从t中选择*(t.month = month('2017-01-01')和t.year = year('2017-01-01'))和(t.month = month('2017-) 05-01')和t.year =年('2017-05-01'));
下面是sql中month()的链接。 https://docs.microsoft.com/en-us/sql/t-sql/functions/month-transact-sql
这可以帮助您解决问题。
答案 2 :(得分:0)
您还可以尝试以下方式:
select
d.*
from
(select
t.*,
cast(rtrim(cast([month] as char(2))) + '/1/' + cast ([year] as char(4)) as date) as dt) d
where
dt >= @dateStart and
dt <= @dateEnd
答案 3 :(得分:0)
如果年份和月份值是整数,您可以将它们转换为varchar,然后转换为日期,并使用BETWEEN。声明startdate和enddate变量的示例:
DECLARE @startdate date = '2015-07-01'
,@enddate date = '2016-07-01'
SELECT *
FROM @myTable
WHERE CAST(CAST(Year as varchar) + '-' + CAST(Month as varchar) + '-01' as date)
BETWEEN @startdate AND @enddate
如果它们是字符或变体,你只需要转换为日期并使用BETWEEN:
DECLARE @startdate date = '2015-07-01'
,@enddate date = '2016-07-01'
SELECT *
FROM @myTable
WHERE CAST(Year + '-' + Month + '-01' as date)
BETWEEN @startdate AND @enddate
答案 4 :(得分:-2)
尝试使用“之间”。
这样的事情:
从2015年至2016年以及6至8年之间的表中选择SALES_AMOUNT