我想计算几个月前的日期字段是
我有一张桌子
CREATE TABLE Date(
Date Date
);
INSERT INTO Date (Date)
VALUES ('05-01-18'),
('04-01-18'),
('03-01-18'),
('02-01-18'),
('01-01-18'),
('12-01-17'),
('11-01-17');
和查询
SELECT Date ,
MONTH(Date),
CASE WHEN MONTH(Date) = MONTH(GETDATE()) Then 'Current Month'
WHEN MONTH(Date) = MONTH(GETDATE()) -1 Then '1 Month Ago'
WHEN MONTH(Date) = MONTH(GETDATE()) -2 Then '2 Month Ago'
ELSE 'n/a' END AS [Months Ago]
FROM Date
这给了我正确的结果:
| Date | | Months Ago |
|------------|----|---------------|
| 2018-05-01 | 5 | Current Month |
| 2018-04-01 | 4 | 1 Month Ago |
| 2018-03-01 | 3 | 2 Month Ago |
| 2018-02-01 | 2 | n/a |
| 2018-01-01 | 1 | n/a |
| 2017-12-01 | 12 | n/a |
| 2017-11-01 | 11 | n/a |
但无论如何要动态创建它而不是继续编写case表达式。因此,如果有人在未来添加更多日期,这将无需添加更多案例就可以使用吗?
答案 0 :(得分:3)
您确实想要datediff()
:
select datediff(month, date, getdate()) as num_months_ago
datediff()
计算两个日期之间的月份边界数。所以,12月31日是“1月1日前一个月”。这似乎是你想要的行为。
我认为把它放在字符串格式中没有优势。
答案 1 :(得分:0)
如果您确实希望它具有字符串格式:
{{1}}但是,我同意Gordon的观点,SQL Server并不是真正的那种格式。 :)