【问题标题】:How to get more than month records如何获取超过一个月的记录
【发布时间】:2022-01-14 03:12:39
【问题描述】:

我在 SQL Server 中有一个关于如何获取多月记录的问题?

CREATE TABLE [dbo].[emp](
    [empid] [int] NULL,
    [doj] [date] NULL
) 

INSERT [dbo].[emp] ([empid], [doj]) VALUES (1, CAST(N'2020-04-05' AS Date))
INSERT [dbo].[emp] ([empid], [doj]) VALUES (2, CAST(N'2021-11-09' AS Date))
INSERT [dbo].[emp] ([empid], [doj]) VALUES (3, CAST(N'2021-11-08' AS Date))
INSERT [dbo].[emp] ([empid], [doj]) VALUES (4, CAST(N'2021-10-04' AS Date))
INSERT [dbo].[emp] ([empid], [doj]) VALUES (5, CAST(N'2021-11-20' AS Date))
INSERT [dbo].[emp] ([empid], [doj]) VALUES (6, CAST(N'2021-11-07' AS Date))
INSERT [dbo].[emp] ([empid], [doj]) VALUES (7, CAST(N'2021-11-10' AS Date))
INSERT [dbo].[emp] ([empid], [doj]) VALUES (8, CAST(N'2021-12-03' AS Date))

基于以上数据,我想要如下输出

empid   |doj    
1       |2020-04-05 
4       |2021-10-04
2       |2021-11-09
7       |2021-11-10

我尝试如下

SELECT [empid], [doj]
FROM [emp]
WHERE datediff(mm,doj,getdate()) > 1

上面的查询缺少1个月1天和1个月2天的记录。

请告诉我如何在 SQL Server 中编写查询来完成此任务。

【问题讨论】:

  • 我不明白。你说一个多月,举个例子,给出上个月或更晚的数据,但是想要去年四月的数据以及今年十月和十一月的数据?
  • 您已标记 SQL Server 2021 和 2016 - 它是什么?请只标记感兴趣的版本。
  • The DATEDIFF function 计算两个日期之间的月数;它计算两个日期之间跨越的月份边界的数量。 DATEDIFF(month, '20211130', '20211201')DATEDIFF(month, '20211101', '20211231') 都将返回 1
  • 输入datediff(mm, 节省了多少精力,datediff(month, 的可读性提高了多少?

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


【解决方案1】:

我相信你的主要问题在于 where 子句

WHERE datediff(mm,doj,getdate()) > 1

DATEDIFF(月份)查找月份的绝对差值,例如,2021 年 3 月 30 日和 2021 年 3 月 31 日之间的差值为 0 个月,但 2021 年 3 月 31 日和 2021 年 4 月 1 日之间的差值为 1 个月。同样,2021 年 3 月 1 日和 2021 年 4 月 30 日之间的差值也是 1 个月。

换句话说 - 在对月份进行 DATEDIFF 时,它会忽略任何更精细的细节,例如日期和时间,而只是比较(例如)2021 年 3 月和 2021 年 4 月之间的几个月。

因此,如果您想获取超过 1 个月前的数据,最好先确定 1 个月前(以一天为单位),然后计算出在那之前发生的事情。它也更有效(作为奖励)。

WHERE  doj <= DATEADD(month, -1, getdate())

在 getdate() 中添加 -1 个月会带走一个确切的月份(例如,今天是 12 月 9 日,添加 -1 个月就是 11 月 9 日)。然后,您可以找到之前发生的任何 doj 记录。

【讨论】:

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