根据列中显示的最近日期从 table 中获取过去 6 个月的数据

Get past 6 months data from a table based on the recent date present in the column

我有一个名为 table 的数据库 table,table 中有一列 Col,数据类型为 varchar。列 Col 包含格式为 MMM-YY 的日期。 例如 Col 的值为:

Col
DEC-21
NOV-21
SEP-20
OCT-19
DEC-21

因为,我们可以看到数据可以像 DEC-21 一样复制。我想根据 Col 中存在的最近一个月提取过去 6 个月的数据。例如,如果 DEC-21 是最近的日期(考虑,日期不存在)等,我想要从 DEC-21 到 JUN-21 的数据,即如果我们将 DEC 映射到 12 和 12-21 到 06-21 JUN 到 06。这个 Table 有很多列,其中一列是我上面提到的 Col,我必须使用 SQL 基于列 Col 提取数据查询。

我写了一个查询:

SELECT *
FROM table
WHERE CAST(RIGHT(Col,4) AS INT) Between 2020 and 2021

但是我得到的是 2020 年到 2021 年之间的数据。因此,通过对上述查询进行一些修改,或者是否有任何其他方法可以从 MMM-YYYY 中的最近日期获取过去 6 个月的数据来自 Col 列的格式。
我在 R 中编写代码,我在使用 dbGetQuery() 时必须传递 SQL 查询。我已经在将它存储在数据框中后完成了这件事,但是有什么方法可以通过 sql 查询直接完成吗?
任何帮助将不胜感激。

像这样的东西应该有用。

SELECT * FROM table 其中 CONVERT(DATE,'01-'+Col) BETWEEN '01-Jun-2021' 和 '31-Dec-2021'

with data as (
    select *,
        convert(date, '01-' + dt, 105) as converted_dt,
        max(convert(date, '01-' + dt, 105)) over () as last_converted_dt
    from T
)
select * from data
where converted_dt >= dateadd(month, -6, last_converted_dt);

105 来自日期格式列表,可以在 cast/convert 的文档中找到。 SQL 服务器可以转换像 Apr 2021 这样的字符串,所以像下面这样的转换也可能有效(如果你真的有四位数的年份)但最好像我上面那样明确格式。

cast(replace(dt, '-', ' ' as date)