转换失败,因为您没有指定年份。如果您要指定“11-20-2015”,您的查询只需插入您需要的任何年份即可。
SELECT *
FROM my_data
WHERE date BETWEEN '11-20-2015' AND '12-15-2015'
或者,如果您想要该日期范围内多年的数据,我会使用 while 循环在 # 表中插入信息,然后从该表中读取,这取决于数据量,这可能是快速或缓慢www这里是例子。
DECLARE @mindatestart date, @mindateend date, @maxdatestart date
SET @mindatestart = '11-20-2010'
SET @mindateend = '12-15-2010'
SET @maxdatestart = '11-20-2015'
SELECT top 0 *, year = ' '
INTO #mydata
FROM my_data
WHILE @mindatestart < @maxdatestart
BEGIN
INSERT INTO #mydata
SELECT *, YEAR(@mindatestart)
FROM my_data
where date between @mindatestart and @mindateend
SET @mindatestart = DATEADD(Year, 1, @mindatestart)
SET @mindateend = DATEADD(Year, 1, @mindateend)
END
这将循环并插入 2010-2015 年这些日期范围的数据,并在末尾添加一个额外的列,以便您可以调用数据并按年份排序
SELECT * FROM #mydata order by YEAR
希望这能有所帮助!
来自下面的评论
SELECT *
FROM my_data
WHERE DAY(RIGHT(date, 5)) between DAY(11-20) and DAY(12-15)
'11-20' 不起作用的原因是因为它是一个字符串,这就是为什么你必须在 ' ' 之间输入它为整数。这就是为什么您没有使用第一个答案中的方法获得任何回报的原因,表日期字段中的“-Year”被添加到数值中,您的值刚刚从 11-20 转换,您可以通过使用这些查询
SELECT MONTH(11-20) --Returns 12
SELECT MONTH(11-20-2015) -- Returns 6
SELECT MONTH(11-20-2014) -- Returns 6
使用 RIGHT(Date, 5) 你只会得到月-日,然后你会确定那个日期的日期,所以 DAY(RIGHT(DATE, 5) 并且你应该得到理论上应该在这些日期范围内的东西,尽管年。但是我不确定数据的准确性如何,而且为了不在您的原始查询中添加额外的 8 个字符需要做很多工作。