Date_Trunc无法正常工作

时间:2019-05-08 00:47:26

标签: sql amazon-web-services amazon-redshift

我正在尝试在SQL语句中使用Date_Trunc for MONTH函数,但是不知怎么对我不起作用。我试图提取在2019年4月1日之后发生的条目。Redshift数据库中的原始日期格式是我试图将其归类为月/年存储桶的格式: 2019-04-08T00:13:20.000Z

输入

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 个答案:

答案 0 :(得分:1)

DATE_TRUNC Function - Amazon Redshift timestamp 作为输入,并提供 timestamp 作为输出:

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,因为它与一天开始时的午夜比较。这与比较两个日期(不带时间戳)不同。

答案 1 :(得分:0)

假设您使用的是Postgres,则需要在日期常量周围加上引号,并且可以将其转换为正确的类型:

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

Here是db <>小提琴。

答案 2 :(得分:0)

该函数的语法为DATE_TRUNC('datepart', timestamp),似乎您需要使用DATE_TRUNC('month', session_utc),它已经截断到April 2019的第一个日期,即 {{ 1}})