如何筛选“INT”格式的日期列

How to filter a date column that is in "INT" format

提问人:Zaahid Munshi 提问时间:11/15/2023 最后编辑:marc_sZaahid Munshi 更新时间:11/15/2023 访问量:35

问:

我有一个表格,日期列的格式为 INT。我需要两个单独的查询。第一个查询需要从当年开始到当天提取数据,第二个查询需要从上一年到上一年的相应日期提取数据。"yyyy/MM/dd"

例如:

Query1 = (01 January 2023 to 15 November 2023)
Query2 = (01 January 2022 to 15 November 2022)

我试过了

date_parse(cast(tbl_dt as varchar), '%Y%m%d') > date(current_date) - interval '365' day

但这需要最后的 365 天。

我也尝试了 where ,但这基本上是硬编码的,我需要每年更改查询。tbl_dt> 20230101

SQL Hive dbeaver trino

评论

0赞 Dai 11/15/2023
“列是格式为”yyyy/MM/dd“的 INT”——这是不可能的,不能包含斜杠。你真的是指格式吗?intyyyyMMdd
0赞 Dai 11/15/2023
是否有原因不能将列更改为使用日期/日期时间类型?
0赞 Guru Stron 11/16/2023
请添加一些示例数据。

答:

2赞 Fenton 11/15/2023 #1

您可以通过转换为日期格式(即 yyyyMMdd)将筛选日期转换为 INT。112

SELECT CAST(CONVERT(varchar(8), GETDATE(), 112) AS INT)

这将为您提供:

20231115

因此,您可以生成要过滤的 INT,而不是将每个 INT 转换为日期来过滤它们。

从长远来看...您可能希望添加一个具有日期类型的新列,然后开始填充它/将 INT 数据迁移到其中。这为您提供了一条远离 INT 的途径,而无需立即立即停止使用它们。

若要在查询中使用此转换,子句将为:WHERE

WHERE
    tbl_dt > CAST(CONVERT(varchar(8), @fromDate, 112) AS INT)
AND
    tbl_dt < CAST(CONVERT(varchar(8), @toDate, 112) AS INT)

不包括两个日期,不包括在