如何在WHERE子句中使用DATENAME

时间:2012-04-13 07:57:12

标签: sql-server-2008 where

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

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

DATANAME(MONTH,'@Date') 

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

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

此处报告转换错误...如何显示特定月份的数据,任何人都可以帮助我

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

如果您想显示特定年份和月份的数据,可以使用YEARMONTH功能:

SELECT ...
FROM ...
WHERE YEAR(mydate) = 2012 AND MONTH(mydate) = 3 -- March, 2012

答案 2 :(得分:1)

对我而言,您的字段Date似乎不属于varcharnvarchar,因此使用Datetime =字符串的条件显然是错误的。

你试过吗

WHERE DATE= @Date

答案 3 :(得分:1)

不应该是:

DATENAME(MONTH, @Date) 

而不是:

DATANAME(MONTH,'@Date') 

(注意&#34; DATA&#34; vs&#34; DATE&#34; @Date不在报价单中)

然后在日期/日期时间列中使用它,你必须像下面那样投射双方:

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

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

答案 4 :(得分:1)

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

如果您想查找特定月份的日期。 (你必须记住年份状况)

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

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

WHERE DATE = @date