【发布时间】:2022-01-19 14:14:13
【问题描述】:
我正在尝试在 Hadoop 数据库中获取以下条件的记录:
select
CUSTOMER_SITE_NBR as account_site_nbr,
SITE_USE_ID as account_site_use_id,
CREATION_DATE_TIME as create_date_time,
LAST_UPDATE_DATE_TIME as main_source_last_update_date_time
from hub_customer.dim_site_use_mdm
where cast (CREATION_DATE_TIME as date)
BETWEEN '2020-02-01' and '2020-02-29' and cast (LAST_UPDATE_DATE_TIME as date) = '2020-02-28' and
site_use_code <> 'HEADQUARTER' order by
account_site_nbr,
account_site_use_id,
create_date_time,
main_source_last_update_date_time;
返回的记录如下:
如您所见,main_source_last_update_date_time 列将时间戳中的所有时间部分返回为 00:00:00。我们数据库中的数据很少有 00:00:00 的时间戳。
我又测试了两种情况:
案例 1:这给出了错误的结果
select
CUSTOMER_SITE_NBR as account_site_nbr,
SITE_USE_ID as account_site_use_id,
CREATION_DATE_TIME as create_date_time,
LAST_UPDATE_DATE_TIME as main_source_last_update_date_time
from hub_customer.dim_site_use_mdm
where cast (CREATION_DATE_TIME as date)
BETWEEN '2020-02-01' and '2020-02-29' and cast (LAST_UPDATE_DATE_TIME as date) = '2020-02-28' and
site_use_code <> 'HEADQUARTER' AND SITE_USE_ID = '100000010853754' order by
account_site_nbr,
account_site_use_id,
create_date_time,
main_source_last_update_date_time;
案例 2:
select
CUSTOMER_SITE_NBR as account_site_nbr,
SITE_USE_ID as account_site_use_id,
CREATION_DATE_TIME as create_date_time,
LAST_UPDATE_DATE_TIME as main_source_last_update_date_time
from hub_customer.dim_site_use_mdm where
SITE_USE_ID = '100000010853754'
正确的数据是第二种情况。 SELECT 语句中没有 CAST。似乎 main_source_last_update_date_time 列已转换为 DATE,然后又转换回时间戳 - 因此,它可能会在记录中给出 00:00:00。该问题仅出现在此表中,因为我们有其他具有类似 SQL 查询的表,并且它们提供了更正的结果。
如何找到此问题的原因以及解决此问题的正确方法是什么?
亲切的问候,
【问题讨论】: