【问题标题】:SQL 2012 - Query to return month numberSQL 2012 - 查询返回月份数
【发布时间】:2020-10-05 20:46:51
【问题描述】:

我需要返回给定日期的月份数。对于当前月份,月份编号为 0。对于下个月,MonthNo 为 1。上个月为 -1,2 个月前为 -2。等等 因此,假设今天是 2020 年 6 月 16 日,请参见下面的示例数据:

IF OBJECT_ID('tempdb..#DateTest') IS NOT NULL
    DROP TABLE #DateTest

CREATE TABLE #DateTest
(
DateTest Date
)

INSERT INTO #DateTest
VALUES
('23/08/2020'),
('14/06/2020'),
('01/06/2020'),
('15/05/2020'),
('01/05/2020'),
('18/01/2020') 

Select * FROM #DateTest

我需要返回以下内容:

Date          MonthNo
23/08/2020    2
14/06/2020    0
01/06/2020    0
15/05/2020    -1
01/05/2020    -1
18/01/2020    -5

有没有办法返回这个信息?

【问题讨论】:

  • DateDiff 有什么问题?
  • 旁注:您不应该使用dd/MM/yyyy 作为日期格式,因为它是特定于文化的(例如,尝试在 Rextester 上运行它,将字符串转换为日期时间时会出错)。而是使用 ISO8601 中指定的格式之一:yyyy-MM-ddyyyymmdd。这样,您在任何文化中都是安全的。

标签: sql sql-server tsql sql-server-2012


【解决方案1】:

看起来像普通的DATEDIFF,它应该适合你:

SELECT 
  DateTest AS [Date],
  DATEDIFF(MONTH, GETDATE(), DateTest) AS [MonthNo]
FROM #DateTest

Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多