SQL Server日期查询,年和月作为单独的列

时间:2013-02-21 20:35:47

标签: sql-server-2008

我有表格,其中年份和月份作为整数存储在单独的列中。我的问题是如何从当前日期(即运行查询的日期)检索前12个月。因此,如果日期是2013年2月15日,那么我希望仅从2013年2月15日到2012年2月14日获取记录,而不会返回任何其他年份和月份。

这样做有简单的方法吗?

由于

3 个答案:

答案 0 :(得分:0)

只是为了给你一个想法,也许这样的事情会有所帮助:

select CONVERT(datetime, CONCAT ( year, month, date ))
from your_table

答案 1 :(得分:0)

使用DATEADD()查找1年前的日期:

SELECT *
FROM myTable
WHERE DATEADD(year, -1, GETDATE()) >= 
      CONCAT(CAST(year AS varchar), CAST(month AS varchar), CAST(date AS varchar))

答案 2 :(得分:0)

我强烈建议您更改该数据库的设计。 正如Edgar Frank Codd所说,日期是原子的,也就是说,它不能(或不应该)在较小的部分中分开。 如果还为时不晚,请更改您的设计,将日期设置为日期时间格式,这将消除任何类型的问题检索日期。你有数百个日期和时间函数可以轻松地检索日期,否则你会秃顶思考查询。

选择(无论如何) 来自(表) current_date()和Dateadd(yy,-1,current_date())之间的位置(表的日期列);

如果您更改设计,这将是您的查询的代码。 否则,你可以做这样的事情:

选择(无论如何) 来自(表) where(table.year between(Select MAX(table.year)From table)AND(Select MAX(table.year)-1 from table))AND table.month =(试试并获得实际月份)AND table.day = (尝试并获得实际的一天);

正如您所看到的,很难弄清楚查询执行的日期和月份。 随着这一年,我假设最大年份是实际的... 这不是做事的方式,我强烈建议你改变设计。 希望它有所帮助。