2017-12-14 25 views
1

내가 쿼리 아래 실행하고 노력하고 있습니다 :date_trunc 잘못

select a.event_date, 
    date_format(date_trunc('month', a.event_date), '%m/%d/%Y') as date 
from monthly_test_table a 
order by 1; 

출력 :

2017-09-15 | 09/01/2017 
2017-10-01 | 09/30/2017 
2017-11-01 | 11/01/2017 

사람이 말해 줄 수 왜 날짜 "2017년 10월 1일"그것은 나에게 날짜를 보여주고있다 date_trunc를 사용한 후 "09/30/2017"로

미리 감사드립니다 ...!

+0

당신이 질문에 대답하는 데 도움이됩니다 질문에서 원하는 형식을 포함 할 수 있습니다. – roh

+0

TimeZone을 알려주시겠습니까? –

답변

0

역순으로 서식이 잘못되었습니다. 당신은 trunc를 복제하기 위해 1 일 (yourdate)을 빼기 위해 논리 date_add을 사용할 수 있습니다 아래의 코드를

select a.event_date, 
    date_format(date_trunc('month', a.event_date), '%Y/%m/%d') as date 
from monthly_test_table a 
order by 1; 
0

를 사용합니다. 예를 들어

는 :

2017-10-01 - day('2017-10-01') is 1 and you add 1-1=0 days 
2017-08-30 - day('2017-08-30') is 30 and you add 1-30=-29 days 

나는 최근에 같은 문제에 직면하고이 논리를 사용하는 의지.

date_add(from_unixtime(unix_timestamp(event_date,'yyyy-MM-dd'),'yyyy-MM-dd'), 
     1-day(from_unixtime(unix_timestamp(event_date,'yyyy-MM-dd'),'yyyy-MM-dd')) 
     ) 

추신 : 내가 아는 한, Hive documentation에는 date_trunc 기능이 없습니다.

0

아래 소스 코드에 따라 : UTC_CHRONOLOGY 시간은 w.r.t로 번역됩니다. 로케일은 또한 Description에 세션 시간대가 정확도라고 언급되어 있으며 URL도 참조하십시오.

@Description("truncate to the specified precision in the session timezone") 
@ScalarFunction("date_trunc") 
@LiteralParameters("x") 
@SqlType(StandardTypes.DATE) 
public static long truncateDate(ConnectorSession session, @SqlType("varchar(x)") Slice unit, @SqlType(StandardTypes.DATE) long date) 
{ 
    long millis = getDateField(UTC_CHRONOLOGY, unit).roundFloor(DAYS.toMillis(date)); 
    return MILLISECONDS.toDays(millis); 
} 

https://prestodb.io/docs/current/release/release-0.66.html를 참조 :::

시간대 :
이 릴리스가 제대로 날짜/시간 계산을 수행하는 데 필요한 시간대 규칙을 완벽하게 지원합니다. 일반적으로 세션 시간대는 시간 계산에 사용됩니다. 가능한 경우 쿼리를 전송하는 클라이언트 컴퓨터의 표준 시간대입니다. 그렇지 않으면 Presto 코디네이터를 실행하는 서버의 시간대입니다.

일광 절약 제 뒤에있는 표준 시간대로 작동하는 쿼리의 경우 예기치 않은 결과가 발생할 수 있습니다. 예를 들어, 우리는 미국/로스 앤젤레스 시간대에 사용하여 24 시간 추가하려면 다음 쿼리 실행하는 경우 :

가 ('시간', 24, TIMESTAMP '2014년 3월 8일 09:00 DATE_ADD 선택 : 00 ');

출력 : 2014년 3월 9일 10 : 00 : 00.000