2014-05-22 4 views
1

내가 좋아하는 뭔가를 할 수 있도록하려면MonetDB에서 어떻게 날짜를 정수로 가져올 수 있습니까?

SELECT cast(my_date_col AS int) FROM my_table; 

난 당신이 BAT 구조에보고하고 적절한 요소를 가지고 있는지 찾을 것 값, 즉 MonetDB가 내부적으로 사용하는 정수를 좀하고 싶습니다 MonetDB의 GDK에있는 코드. 이제, AFAICT,이 내부 가치는 Epoch 이후 일수이며, "Year 0"에 1 월 1 일입니다 (따라서 1 월 3 일 2 해는 366 + 365 + 2 = 732가됩니다).

실제로 관리 할 수있는 최선 MonetDB으로

SELECT my_date_col AS int - cast('1-1-1' AS date) - 366 FROM my_table; 

는 "올해 제로"날짜를 받아 들일 것이다. 이것은 오히려 못생긴 해킹입니다, 나는 더 잘하고 싶습니다. 도와주세요?

+0

나는 아무것도 볼 수 없어 [monetdb 문서 (https://www.monetdb.org/Documentation/SQLreference/Temporal)는 획기적인 데이터 유형을 지원 제안하는. 레퍼런스가 있으십니까? –

+0

@ MikeSherrill'CatRecall ': 무슨 뜻인지 잘 모르겠습니다. Epoch (이 문맥에서)는 시간이나 날짜를 usecs, msecs, days 또는 기타 등등 오프셋으로 계산하는 시점입니다. 전통적인 UNIX 시스템에서 Epoch는 1970 년 1 월 1 일입니다. – einpoklum

+0

"Epoch"는 본질적으로 정수입니다. 날짜는 본질적으로 * 정수가 아니며 표준 SQL에서는 정수로 변환 될 수 없습니다. 1970-01-01에서 my_date_col까지의 일 수를 얻으려고하십니까? –

답변

1

"my_date_col"과 1970-01-01 사이의 일 수를 얻으려면 표준 SQL에서 다른 하나에서 빼기 만하면됩니다. 귀하의 플랫폼 인 monetdb가이 구문을 지원하는 것으로 보이지만 설치하지 않았습니다. PostgreSQL에 이러한 예제를 작성했습니다. 현재 날짜 (2014-05-23)에 1만6천2백13일을 추가하여 결과를

select current_date - date '1970-01-01' as num_days; 
 
num_days 
-- 
16213 

확인합니다. 이 또한 결과는 타임 스탬프가 아닌 날짜 때문에

select cast ((date '1970-01-01' + interval '16213' day) as date) as target_date 
 
target_date 
-- 
2014-05-23 

캐스트가 필요하다.

귀하의 경우 "current_date"대신에 열 이름이 필요합니다. 그래서이 라인을 따라 뭔가를 찾고 있습니다.

select my_date_col - date '1970-01-01' as num_days 
from your-table-name; 
+0

@einpoklum : 아마도 질문을 수정하고 그 세부 사항을 추가해야 할 것입니다. 소스 코드를 살펴 보았지만 관련성이없는 것을 보지 못했습니다. (그다지 의미하지는 않습니다.) –

+0

@einpoklum : 귀하의 질문에 충분한 내용을 포함 시켜서 * 우리가 * 귀하가 * 볼 수있는 것을 볼 수 있습니다. (나는 더 일찍 그것을 명확하게하지 않았다.) –

+0

내 질문을 편집했습니다. – einpoklum