我的sql server 2014表包括 datetime
调用的列 CreatedOn
.
每天我都需要确认在6个月前或6个月前的倍数(即存储日期时间后6个月、12个月后、18个月后等)创建的公司。我可以编写查询的其余部分,但无法确定如何识别与日期列表匹配的行(即2020年10月27日、2020年4月27日、2019年10月27日、2019年4月27日、2018年10月27日、2018年4月27日等)。
下面是一个查询,以获取6个月前创建的公司。如何调整查询以包含额外的6个月间隔?
select *
from work
where DATEPART(d, CreatedOn) = DATEPART(d, DATEADD(m, -6, getdate()))
and DATEPART(m, CreatedOn) = DATEPART(m, DATEADD(m, -6, getdate()))
and DATEPART(yyyy, CreatedOn) = DATEPART(yyyy, DATEADD(m, -6, getdate()))
样本数据
Name CreatedOn
-------------------------------------
Company A 2020-10-27 13:49:15.597
Company B 2021-04-27 15:25:09.720
Company C 2021-03-16 15:50:01.443
Company D 2018-04-27 21:58:18.903
数据表
我想要a公司和d公司在我的结果集中
4条答案
按热度按时间xtupzzrd1#
我认为如果你能合并一个新的类似于表格的通信系统,当你的公司需要发送电子邮件时,你可以为他们生成时间表,那就更好了。通过比较该表中的日期,您可以向他们发送邮件。这将是一个更干净的方法,你将能够验证公司何时会收到电子邮件。您可以向该表添加更多的列,以筛选出数据并用于报告目的。
您必须根据公司创建日期预填充和管理此表数据。您可以通过将在某个时间间隔触发的存储过程来实现这一点。
zaq34kh62#
我将在分离的变量中分离datetime范围,就像这个db<>fiddle示例:
查询:
结果:
voase2hg3#
这是datediff的工作。
试试这样的。
看小提琴。
你仍然需要跟踪你发送的信息,以避免错误地向你的客户发送垃圾邮件。
e3bfsja24#
这段代码看起来像是在做你要找的事情。
where子句的作用是:
确保上一个月的前一天与当前的月数相同,在本例中为27。
确保以月为单位的日期差平均除以6
确保以月为单位的日期差至少为6个月