0

我正在使用的数据在单独的列中包含 DAY-MONTH-YEAR,我想创建一个使用 MONTH 和 YEAR 组合的过滤器。这是一个例子:

transaction_id | customer | amount | day | month | year
---------------+----------+--------+-----+-------+-------
1                100         1000     01    05     2019
2                100          500     24    11     2018
3                100         2700     26    10     2018
4                205          800     19    11     2020
5                333         8000     05    05     2020
6                333          500     02    10     2019
7                333          200     19    12     2018  

如果我只想返回transaction_id2019 年 1 月以后发生的情况,是否可以通过 MONTH + YEAR 的 concat 来完成,然后创建一个带有别名的新列?我尝试做这样的事情,但它一直在一年内返回:

SELECT transaction_id, concat(MONTH, YEAR) AS FULLDATE
FROM sample_table

这会以 201901(2019 年 1 月)的形式返回 FULLDATE 值,但我想知道这是否确实是正确的方法。

另外,如果是这样,我怎么能在 WHERE 子句中使用这个 FULLDATE:

SELECT transaction_id, concat(MONTH, YEAR) AS FULLDATE
FROM sample_table
WHERE FULLDATE >= 201901

我如何将其构建到子查询中才能使用别名?或者我应该尝试像 HAVING 子句这样的东西吗?我尝试了两者,但无法使其正常运行。也许有更好的方法?

4

1 回答 1

1

我会建议使用数学函数:

where year * 100 + month >= 201901

这假设yearmonth是数字——这似乎是合理的。如果它们是字符串,请使用字符串比较:

where concat(year, month) >= '201901'

注意:如果列是数字,这将产生20191一月,这不是您想要的。

在 SQL Azure 中,您实际上可以将其定义为计算列:

alter table t add yyyymm as (year * 100 + month);

(或者concat()如果列是字符串。)

于 2021-03-08T02:33:12.913 回答