我有一个表,其中包含从2010年到现在的记录,并带有日期时间字段。需要查找多年来同一时期的记录。
我需要的示例:输入表单中两个日期(D1和D2(之间的行:11-15(11月15日(和01-15(明年1月15日2021-11-15至2022-01-152020-11-15至2021-01-152019-11-15至2020-01-15等等…
其他信息:搜索日期来自一个表单,所以它并不总是相同的。若日期段恰好在同一年,则我的查询有效。
我尝试过的:
SELECT * FROM my_table WHERE (DATEPART(MONTH, date_field)>=11
AND DATEPART(DAY, date_field)>=15)
AND (DATEPART(MONTH, date_field)<=1
AND DATEPART(DAY, datefield)<=15)
但显然它不起作用。。。。。
有什么想法吗?
您可以使用理货
with t0(n) as (
select n
from (
values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10)
) t(n)
), tally as(
select top(13) 2009 + row_number() over(order by t1.n) year
from t0 t1, t0 t2, t0 t3
)
select m.*
from tally t
join mytable m on m.date_field >= datefromparts(t.year, 11, 15)
and date_field < datefromparts(t.year + 1, 1, 16);
您需要更改where条件以生成预期的记录
由于您希望记录在某一天/月的范围内,这些记录可以属于一个或另一个标准,因为"与",记录不能满足where子句,因此没有提取
从my_table 中选择*
其中(DATEPART(MONTH,date_field(>11和DATEPART(DAY,date_field(>15
或者(DATEPART(MONTH,date_field(<1和DATEPART(DAY,日期字段(<15(
这应该可以完成