Vertica: Как создать новый столбец, вычитая два других столбца? - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть таблица Vertica с именем Start_End, например:

|   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_between для вычитания Started из 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 ]

1 голос
/ 21 апреля 2020

Проверьте здесь: 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, поведение последнего дня месяца , et c) - это то, что вам нужно. В противном случае, вы можете захотеть DATE_TRUN C () сначала двумя операндами, например, как предлагает @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)

Удачи ...

1 голос
/ 21 апреля 2020

Вы, кажется, хотите полных месяцев между датами. Кажется, это:

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