【问题标题】:Change all timestamps with certain time of day to previous date将一天中特定时间的所有时间戳更改为上一个日期
【发布时间】:2019-11-27 18:19:44
【问题描述】:

我正在尝试将时间戳的时间为上午 05:59:59 或以下的所有数据行转换为上一个日期。例如,“2018-12-08 05:05:00”将是“2018-12-07”,“2018-11-06 03:02:00”将是“2018-11-05”。

时间戳采用 'YYYY-MM-DD HH:MM:SS' 格式并存储为 varchar

到目前为止,这是我对查询的尝试:

SELECT lift.spot_datetime AS broadcastdate,
    CASE when broadcastdate > to_date(>='06:00:00', 'hh:mm:ss') then to_date('MM/DD/YYYY') end as same_date,
    ELSE when broadcastdate > to_date(<='05:59:59', 'hh:mm:ss') then DATE_SUB(to_date('MM/DD/YYYY' - 1) end as subtract_date

我遇到的一个问题是,我运行查询的 AWS Athena 客户端似乎无法解析“dateadd”或“datesub”函数。

“AWS Athena 客户端抛出错误。SYNTAX_ERROR: line 1:17: 列 'day' 无法解析”

我在运行上述查询时得到的当前错误如下: “AWS Athena 客户端抛出了一个错误。第 2:39 行:在输入 'to_date(>=' [Execution ID not available]] 处没有可行的替代方案”

【问题讨论】:

    标签: sql presto amazon-athena


    【解决方案1】:

    从您的 SQL 查询中,并不清楚您想要什么样的结果结构,但让我试一试:

    SELECT
        spot_datetime AS broadcastdate,
        IF ( TIME(spot_datetime) < '06:00:00',
            DATE(spot_datetime) - INTERVAL 1 DAY,
            DATE(spot_datetime)
        ) AS your_desired_date
    FROM lift;
    
    +---------------------+-------------------+
    | broadcastdate       | your_desired_date |
    +---------------------+-------------------+
    | 2018-12-08 05:05:00 | 2018-12-07        |
    | 2018-11-06 03:02:00 | 2018-11-05        |
    | 2018-11-06 06:00:00 | 2018-11-06        |
    +---------------------+-------------------+
    3 rows in set (0.00 sec)
    

    【讨论】:

    • 该格式可以使用,但不幸的是,我仍然从 AWS Athena 客户端收到错误消息:“[HY000][100071] [Simba][AthenaJDBC](100071) An error has been throwed from AWS Athena 客户端。不支持这种类型的查询 [Execution ID not available]"
    • 我刚刚将数据导出到 MySQL Workbench,以便可以正确运行查询,但我现在想更改日期,以便如果时间戳不包含“HH:MM”的信息:SS”,它也被标记为居住在同一日期,并在“your_desired_date”列中返回。我怎么能这样做?
    • IF 行替换为以下内容:IF ( LENGTH(spot_datetime) &gt; 11 AND TIME(spot_datetime) &lt; '06:00:00',
    • 能够让查询运行,但仍有许多返回 NULL 值的值。此外,许多格式正确的日期时间戳也会为转换后的日期返回 NULL 值,例如2019 年 4 月 15 日 8:18:00 返回 NULL,2019 年 4 月 9 日 10:20:00 返回 NULL。我尝试将 csv 数据重新导入以 spot_datetime 作为日期时间值的 sql 文件,使用查询将列转换为日期时间,然后运行查询,但这也会将 spot_datetime 生成为 NULL。关于如何解决所有这些 NULL 值的任何想法?
    • 没关系,发现在 Excel 中手动过滤 NULL 值并使用公式将单元格值更新为正确的值会更容易
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多