Date_Trunc 无法按预期工作

LaL*_*aTi 2 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;
Run Code Online (Sandbox Code Playgroud)

输出

"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."
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Joh*_*ein 5

DATE_TRUNC函数 - Amazon Redshift时间戳作为输入并提供时间戳作为输出:

DATE_TRUNC('datepart', timestamp)
Run Code Online (Sandbox Code Playgroud)

例如:

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

2019-05-01 00:00:00
Run Code Online (Sandbox Code Playgroud)

因此,你的行应该是:

WHERE job_date >= DATE_TRUNC('month', '2019-04-01'::timestamp) 
Run Code Online (Sandbox Code Playgroud)

如果您希望输出为日期,请附加::date

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

2019-05-01
Run Code Online (Sandbox Code Playgroud)

另请注意,日期会转换为午夜时的时间戳。这可能会导致某些比较出现差异。例如:

'2019-05-07 03:03:31.389324+00'::timestamp > '2019-05-07'::timestamp
Run Code Online (Sandbox Code Playgroud)

将评估为,True因为它与一天开始时的午夜进行比较。这与比较两个日期(没有时间戳)不同。