【发布时间】:2020-06-03 09:02:47
【问题描述】:
TLDR: 我想根据 CURRENT_DATE 在 Teradata 中获取前两个月的表。目前我只能得到上个月:
SELECT
TO_CHAR(ADD_MONTHS(CURRENT_DATE - EXTRACT(DAY FROM CURRENT_DATE )+1, -1), 'YYYY-MM') MM;
预期输出是:
+--------+
| MM |
+--------+
| 2020-01|
| 2019-12|
+--------+
加长版: 我想要一些东西,可以在像这样的更大查询中使用,对一年中的每一天都有效,而无需对日期进行硬编码。带有硬编码日期的更大查询如下所示:
AND TO_CHAR(SOME_DATE, 'YYYY-MM') IN ('2020-01', '2019-12')
而且效果很好。以下返回结果正常,但仅限 1 个月。
AND TO_CHAR(SOME_DATE, 'YYYY-MM') IN
(
TO_CHAR(ADD_MONTHS(CURRENT_DATE - EXTRACT(DAY FROM CURRENT_DATE )+1, -1), 'YYYY-MM')
)
尝试添加逗号并添加与-2相同的行,不起作用:
AND TO_CHAR(SOME_DATE, 'YYYY-MM') IN
(
TO_CHAR(ADD_MONTHS(CURRENT_DATE - EXTRACT(DAY FROM CURRENT_DATE )+1, -1), 'YYYY-MM'),
TO_CHAR(ADD_MONTHS(CURRENT_DATE - EXTRACT(DAY FROM CURRENT_DATE )+1, -2), 'YYYY-MM')
)
错误是:
SELECT 失败 3706:语法错误:预期在 ')' 和 '.' 之间。
【问题讨论】:
-
基于已删除的答案/cmets:是不是你想要的简单联合,两行以 2020-01 和 2019-02 作为值?
-
@Turo - 实际上,我想要一些可以在更大的查询中使用的东西,例如:
AND SOME_DATE IN ('2020-01', '2019-12'),无需对日期进行硬编码。 -
UNION 会成功,但两者之间有什么问题?
-
@Turo - 我想他们两个都没有问题,如果他们可以提供所需的答案,而无需硬编码。
-
Teradata 不允许在
IN中计算表达式(对于单个条件,它可能转换为=),不知道为什么存在这种愚蠢的限制。
标签: sql performance date teradata