0

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

有没有简单的方法来做到这一点?

谢谢

4

3 回答 3

1

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

SELECT *
FROM myTable
WHERE DATEADD(year, -1, GETDATE()) >= 
      CONCAT(CAST(year AS varchar), CAST(month AS varchar), CAST(date AS varchar))
于 2013-02-21T20:40:43.480 回答
0

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

select CONVERT(datetime, CONCAT ( year, month, date ))
from your_table
于 2013-02-21T20:40:00.300 回答
0

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

在 current_date() 和 Dateadd(yy,-1,current_date()) 之间选择(随便)从(表)哪里(表的日期列);

如果您更改设计,这将是您查询的代码。否则,您可以执行以下操作:

Select (whatever) From (table) where (table.year between (Select MAX(table.year) From table) AND (Select MAX(table.year)-1 From table)) AND table.month = (尝试获取实际月份)AND table.day =(尝试获取实际日期);

如您所见,很难确定查询是在哪一天和哪一个月执行的。我假设最大年份是实际年份……这不是做事的方式,我强烈建议您更改设计。希望能帮助到你。

于 2013-02-21T21:03:00.660 回答