任何人都知道如何在月份和年份组合之间选择数据。这是我的代码。
DECLARE @StartYear int
DECLARE @EndYear int
DECLARE @StartMonth int
DECLARE @EndMonth int
SET @StartYear = DATEPART(Year,'01-01-1753')
SET @StartMonth = DATEPART(Month,'01-01-1753')
SET @EndYear = DATEPART(YEAR,DATEADD(month,-1,GETDATE()))
SET @EndMonth = DATEPART(MONTH,DATEADD(month,-1,GETDATE()))
SELECT station_id,
DATEPART(YEAR,date_time) AS YEAR,
DATEPART(MONTH,date_time) AS MONTH,
CONVERT(date,date_time) AS DATE,
DATENAME(weekday,date_time) AS weekday,
sum(volume) AS Total_volume
FROM rvtcs_data_aggregated_hourly
WHERE DATEPART(MONTH,date_time) > @StartMonth AND DATEPART(YEAR,date_time)= @StartYear
AND DATEPART(MONTH,date_time) <= @EndMonth AND DATEPART(YEAR,date_time)= @EndYear
GROUP BY station_id,
CONVERT(date,date_time),
DATEPART(MONTH,date_time),
DATEPART(YEAR,date_time),
DATENAME(weekday,date_time)
我尝试过类似的东西,但即使有数据也不会返回日期
答案 0 :(得分:1)
使用函数计算年 - 月的第一天(结束日期,添加一个月),然后将>=
和<
用于date_time
列:
WHERE date_time >= DATEADD(year,
@StartYear-2000,
DATEADD(month, @StartMonth-1, '20000101'))
AND date_time < DATEADD(year,
@EndYear-2000,
DATEADD(month, 1+@EndMonth-1, '20000101'))
答案 1 :(得分:0)
我看了下面的2个链接,我个人更喜欢数字:
where datepart(year, date_time) * 100 + datepart(month, date_time)
between @startyear *100 + @startmonth
and @endyear *100 + @endmonth
答案 2 :(得分:0)
如果您有开始日期和结束日期,并且您想要选择这些日期之间的所有记录,包括与这些日期具有相同月份和年份的记录,那么我认为您无需提取月份和年份部分明确,而不是尝试以下:
通过在以下表达式中将GETDATE()
替换为@EndDate,获取@EndDate下个月的第一天:
DATEADD(mm,1,CONVERT(VARCHAR(25),DATEADD(dd,-DAY(GETDATE())+1, GETDATE()),101))
通过在以下表达式中将GETDATE()
替换为@StartDate,获取@StartDate月份的第一天:
CONVERT(VARCHAR(25),DATEADD(dd,-DAY(GETDATE())+1, GETDATE()),101)
在WHERE
条件下使用这两个表达式,如下所示
...
WHERE your_date_field >= CONVERT(VARCHAR(25),DATEADD(dd,-DAY(@StartDate)+1, @StartDate),101)
AND your_date_field < DATEADD(mm,1,CONVERT(VARCHAR(25),DATEADD(dd,-DAY(GETDATE())+1, GETDATE()),101))