当表获得Year和Month字段时,SQL查询以获取日期范围的结果

时间:2017-11-20 15:59:28

标签: sql sql-server date where where-clause

我有一个包含Year和Month字段的表。我需要选择两个特定日期之间的行。如何在where条件下设置? enter image description here

5 个答案:

答案 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