SQL查询没有拉正确的一年

时间:2016-01-19 20:15:03

标签: sql sql-server

我有一个查询

SELECT
    convert(varchar, dates, 101) 
FROM 
    database 
WHERE 
    dates BETWEEN '04/01/2015' AND '04/30/2015'

它返回所有4月份的日期,但问题在于每年(即2010年,2011年,2012年,2013年,2014年,2015年)。我认为它不会读取今年的最后两位数字,只是从2000年开始拉动所有内容。我在想这个是正确的吗?我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

您的日期列可能未定义为日期类型。您可以更新列类型...或在查询中显式转换它:

Select convert(varchar, dates, 101) 
FROM database 
Where convert(date,dates) BETWEEN '04/01/2015' and '04/30/2015'

如果您的日期字段被解释为文本字符串,它将为您提供所有4月日期的原因是因为所有4月日期将按字母顺序排序。如果它正确地将您的字段解释为日期,则可以正确地过滤它们。

答案 1 :(得分:2)

您需要以SQL Server正确理解的标准格式提供日期。请参阅Correct way of specifying a given date in T-SQL

对你而言:

Where dates BETWEEN '20150401' and '20150430'

答案 2 :(得分:0)

在tSQL中,这对你有用:

SELECT DATEPART(year, dates)
FROM [database]
WHERE DATEPART(MONTH, dates) = 4 AND DATEPART(year, dates)=2015;