1

我正在使用 Sql Server 2008,我的表中有一个名为 Date 的列,我想获取特定日期的数据....我需要在 WHERE 条件下给出这个日期。

例如,如果我想在给定日期获取特定月份的记录,如何在 WHERE 条件下使用此日期。

DATANAME(MONTH,'@Date') 

如果我在查询中这样给出,我可以从给定的 DATE 中获取月份,就像我尝试输入 WHERE 条件一样,

WHERE DATE=    DATANAME(MONTH,'@Date')

在这里它报告转换错误...如何显示特定月份的数据,谁能帮助我

4

5 回答 5

3

如果你想要一个表的一个月数据,你应该检查一个间隔。如果您在列上应用函数,则查询不能在日期列上使用索引。

使用类似的方法获取 2012 年 4 月的数据。

-- The date parameter
declare @Date datetime
set @Date = '2012-04-11'

declare @FromDate datetime
declare @ToDate datetime

-- set FromFate to first of april
set @FromDate = dateadd(month, datediff(month, 0, @Date), 0)
-- set ToDate to first of may
set @ToDate = dateadd(month, 1+datediff(month, 0, @Date), 0)

select *
from YourTable
where [Date] >= @FromDate and [Date] < @ToDate
于 2012-04-13T08:51:29.187 回答
2

如果要显示特定年份和月份的数据,可以使用YEARMONTH函数:

SELECT ...
FROM ...
WHERE YEAR(mydate) = 2012 AND MONTH(mydate) = 3 -- March, 2012
于 2012-04-13T08:02:40.793 回答
1

对我来说,您的字段似乎Date不是varcharor类型nvarchar,因此使用 Datetime = string 显然是错误的条件。

你有没有尝试过

WHERE DATE= @Date
于 2012-04-13T08:01:16.760 回答
1

不应该是:

DATENAME(MONTH, @Date) 

代替:

DATANAME(MONTH,'@Date') 

(注意 "DATA" 与 "DATE" 和 @Date 不在引号中)

然后要对日期/日期时间列使用它,您必须像下面这样对双方进行转换:

WHERE datename(Month, [Date]) = datename(Month, [Date])

警告:以上不使用任何索引,因此效率不如"WHERE Date = Date"

于 2012-04-13T08:01:49.817 回答
1

首先:从变量中删除 ''。@Date,而不是'@Date'

如果您想查找特定月份的日期。(您还必须记住年份条件)

WHERE DATANAME(MONTH, @Date) = 'April'

如果你想找到确切的日期:

WHERE DATE = @date
于 2012-04-13T08:06:07.300 回答