Date_Trunc не работает должным образом - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь использовать функцию Date_Trunc for MONTH в инструкции SQL, но почему-то она не работает для меня. Я пытаюсь получить записи, которые происходят после 1 апреля 2019 года. Исходный формат даты из базы данных Redshift - это формат, который я пытаюсь сгруппировать по месяцам / годам: 2019-04-08T00: 13: 20.000Z

Input

SELECT
    client_id as user_id,
    session_utc as job_date --(format:2019-04-08T00:13:20.000Z)
    FROM  table1 as hits
    WHERE job_date >= DATE_TRUNC('month', 2019-04-01) 
    group by 1,2;

выход

"ERROR: function date_trunc("unknown", integer) does not exist Hint: No function matches the given name and argument types. You may need to add explicit type casts."

Что я делаю не так?

Ответы [ 3 ]

1 голос
/ 08 мая 2019

Функция DATE_TRUNC - Amazon Redshift принимает метку времени в качестве входных данных и предоставляет метку времени в качестве выходных данных:

DATE_TRUNC('datepart', timestamp)

Например:

SELECT DATE_TRUNC('month', '2019-05-07'::timestamp)

2019-05-01 00:00:00

Поэтому ваша строка должна выглядеть так:

WHERE job_date >= DATE_TRUNC('month', '2019-04-01'::timestamp) 

Если вы хотите получить выходные данные в качестве даты, добавьте ::date:

SELECT DATE_TRUNC('month', '2019-05-07'::timestamp)::date

2019-05-01

Также обратите внимание, что дата преобразуется в метку времени , как в полночь. Это может вызвать разницу для некоторых сравнений. Например:

'2019-05-07 03:03:31.389324+00'::timestamp > '2019-05-07'::timestamp

будет оцениваться как True, потому что оно сравнивается с полуночью в начале дня. Это отличается от сравнения двух дат (без отметок времени).

0 голосов
/ 08 мая 2019

Синтаксис для функции DATE_TRUNC('datepart', timestamp), кажется, вам нужно использовать как DATE_TRUNC('month', session_utc) ( это уже усекается до первой даты April 2019 т.е. 2019-04-01)

0 голосов
/ 08 мая 2019

Предполагается, что вы используете Postgres, вам нужны кавычки вокруг вашей константы даты, и вы можете преобразовать ее в нужные типы:

WHERE job_date >= DATE_TRUNC('month'::text, '2019-04-01'::date) 

Здесь - это дб <> скрипка.

...