2009-05-09 7 views
4

데이터웨어 하우스 프로젝트에서 일하고 있고 데이터 흐름의 파생 열 구성 요소에서 SQL datetime 레코드의 날짜 부분을 제거하는 방법을 알고 싶습니다.SQL SSIS에서 날짜/시간 문자열의 날짜를 제거하는 방법은 무엇입니까?

일단 datetime이 시간으로 변환되면 시간에 대한 조회를 수행하여 시간 차원 테이블에서 관련 시간 레코드를 찾습니다.

파생 된 열 변환 내에서이를 수행 할 수있는 간단한 함수를 제공 할 수 있습니까?

예 : "12/02/2008 11:32:21 AM"과 같은 datetime을 단순히 "11:32:21 AM"으로 변환하십시오.

답변

6

DT_DBTIME 유형 (파생 열 변환 또는 변환 유형 변환 사용)으로 캐스팅 만하면됩니다. DT_DBTIME에는 날짜/시간 중 일부 (시간, 분, 초)가 포함되어 있으므로 날짜 부분을 제거 할 수 있습니다.

+1

맞음 http://msdn.microsoft.com/en-us/library/ms141036.aspx –

+0

이 작업 - 두 데이터 변환 (하나는 DT_DBTIME에서 하나는 DT_STR로)을 수행해야하므로 다소 복잡해 보입니다. -하지만 작동합니다. – rrydman

-2

저는 개인적으로이를 위해 일련의 기능을 사용합니다. 예컨대 :

ALTER FUNCTION [dbo].[TIMEVALUE] 
(
@Datetime datetime 
) 
RETURNS datetime 
AS 
BEGIN 
    RETURN (@Datetime - CAST(ROUND(CAST(@Datetime AS float), 0, 1) AS datetime)) 
END 

나는 모든 신용 항에 싶지만 정말 this guy로 이동합니다.

+2

이것은 SSIS 솔루션이 아닌 SQL을 제공하는 세 번째 대답입니다! –

+0

아마 3 명의 사람들이 같은 실수를했다는 것은 쉬운 실수 였음을 암시합니다. – CJM

2

당신이 마이클의 솔루션이 작동하지 않습니다 변수 표현에서이 작업을 수행해야하지만, 다음과 같은 식 사용할 수있는 경우 :

(DT_DATE)(DT_DBDATE)GETDATE() 

이 (DT_DBDATE는) 날짜 만에 현재 날짜와 시간을 변환합니다. 그러나 새로운 데이터 형식은 SSIS의 datetime과 호환되지 않습니다. 따라서 호환되는 유형으로 변환하려면 (DT_DATE)를 사용해야합니다.

이 솔루션 씨는 자신의 블로그에 게시했다 러셀 Loski에 속하는 : http://www.bidn.com/blogs/RussLoski/ssas/1458/converting-datetime-to-date-in-ssis

+0

질문은 시간이 아닌 날짜를 제거하는 것입니다 (즉, "제거"). –

+1

원본 질문에 대답하지 않지만 전체 길이 datetime을 데이터베이스 삽입에 적합한 형식으로 변환하는 방법을 이해하는 데 도움이되었습니다. 고마워요 :) –

1

는, 스케줄링 응용 프로그램에 대한 보고서를 작성하여이 우연히 날짜 시간 데이터의 일부로 저장 한 시간이 필요 유형. 나는 당신에게이 mon dd yyyy hh : miam (또는 PM)을주는 0으로 datetime을 형성했고, AM/PM 형식으로 만 시간을 반환 한 부분 문자열을 만들었습니다.

아래의 예.

DECLARE @S DATETIME = GETDATE() 

SELECT SUBSTRING(CONVERT(NVARCHAR(30), @S , 0) , 13 , 10) AS ApptTime 
    , CONVERT(NVARCHAR(30), @S , 0) AS ApptDate 
2

사실이처럼 처음이 개 표현을 반대하는 경우 : (DT_DBDATE)(DT_DATE)GETDATE() 대신 (DT_DATE)(DT_DBDATE)GETDATE()의, 당신은 날짜 필드 오프 시간을 TRUNCATE 것입니다.

표현식이 DT_DBDATE 표현식보다 앞에 있으면 출력에 시간 부분이 남아 있지만 모두 0으로 재설정됩니다.