Vertica:如何通过减去其他两列来创建新列?

时间:2020-04-21 00:29:20

标签: sql vertica

我有一个名为Start_End的Vertica表,例如:

|   name |    Started |      Ended |
------------------------------------
| Albert | 1970-01-16 | 1970-06-01 |
|  Barry | 1992-05-01 | 1992-07-14 |
|  Carol | 2001-03-16 | 2001-06-03 |

它大约有100,000行。

如何使用months_betweenStarted中减去Ended

结果表如下:

|   name |    Started |      Ended | Month_diff |
-------------------------------------------------
| Albert | 1970-01-16 | 1970-06-01 |           4|
|  Barry | 1992-05-01 | 1992-07-14 |           2|
|  Carol | 2001-03-16 | 2001-06-03 |           2|

以下内容将添加一个空白列:

ALTER TABLE Start_End
ADD COLUMN Month_diff INTEGER

如何使用months_between

2 个答案:

答案 0 :(得分:1)

您似乎想要两个日期之间的完整月份。它认为这是:

select months_between(date_trunc('month', ended), date_trunc('month', started)) - 1 as month_diff

答案 1 :(得分:1)

在这里检查: https://www.vertica.com/docs/9.3.x/HTML/Content/Authoring/SQLReferenceManual/Functions/Date-Time/MONTHS_BETWEEN.htm?zoom_highlight=MONTHS%20BETWEEN

找出MONTHS_BETWEEN()的行为(何时返回INTEGER,何时返回FLOAT,每月的最后一天的行为等)是否是您所需要的。 否则,您可能想要首先DATE_TRUNC()这两个操作数,例如,如@Gordon Linoff建议的那样。或改用TIMESTAMPDIFF(month,...): https://www.vertica.com/docs/9.3.x/HTML/Content/Authoring/SQLReferenceManual/Functions/Date-Time/TIMESTAMPDIFF.htm?zoom_highlight=timestampdiff

也就是说,尝试以下尺寸:

ALTER TABLE start_end
ADD month_diff INTEGER DEFAULT MONTHS_BETWEEN(ended,started)

祝你好运...