복붙노트

[SQL] 날짜 시간에 대한 SSIS 소스 형식 암시 적 변환

SQL

날짜 시간에 대한 SSIS 소스 형식 암시 적 변환

사람이 쇼 날짜의 형식은 SSIS에서 다른 데이터 유형에서 지원하는 것을 차트 알고 있나요? 예를 들어, DT_DBTimestamp의 형식은 1 월을 지원합니다. 나는 찾고 시도했지만 아무것도 찾을 수 없습니다.

물어 이유는 내가이 변환 (날짜, '1 월')을 수행하려고 할 때 내가 기대하는 실패 발견이다. 나는 DT_DBTimestamp에 SSIS에이 같은 값을 끌어 그러나, 그것은 암시 2017년 1월 1일로 파악하기보다는 데이터 형식 변환 오류로 행을 리디렉션합니다.

해결법

  1. ==============================

    1.(문자열에서 변환 할 때)이이 날짜 시간 데이터 형식의 기본 형식입니다

    (문자열에서 변환 할 때)이이 날짜 시간 데이터 형식의 기본 형식입니다

    DT_DBDATE
    yyyy-mm-dd
    
    DT_FILETIME
    yyyy-mm-dd hh:mm:ss:fff
    
    DT_DBTIME
    hh:mm:ss
    
    DT_DBTIME2
    hh:mm:ss[.fffffff]
    
    DT_DBTIMESTAMP
    yyyy-mm-dd hh:mm:ss[.fff]
    
    DT_DBTIMESTAMP2
    yyyy-mm-dd hh:mm:ss[.fffffff]
    
    DT_DBTIMESTAMPOFFSET
    yyyy-mm-dd hh:mm:ss[.fffffff] [{+|-} hh:mm]
    

    참고 : DT_DATE와 DT_DBTIMESTAMP는 같은 SET 방법이있다

    그리고 난 지금까지 그 변환 문자열이 현재의 문화 정보에도 따라 생각

    더 자세한 정보는 여기있다

    나는 다음과 같은 실험을했다, 그래서 당신의 코멘트를 읽은 후 나는 귀하의 질문에 대한 관련 기사를 찾을 수 없습니다 :

    SSIS 암시 날짜 변환

    나는 Dataflowtask와 SSIS 패키지를 만들었습니다. 이 dataflowtask에서 나는 (원본으로) 스크립트 구성 요소 및 플랫 파일 대상을 만들었습니다. 이 스크립트는 유형 DT_DbTimeStamp 내부 내가 다음 코드를 사용하는 스크립트의 하나의 출력 열가 오래된 있습니다

    Private dtDate As Date = #01/01/2016#
    
    Public Overrides Sub CreateNewOutputRows()
    
        Output0Buffer.AddRow()
    
    
        Using sw As New IO.StreamWriter("D:\Result.txt", False)
            sw.WriteLine("CultureInfo;Date;Format;Accepted")
            sw.Close()
        End Using
    
    
        For Each ci As System.Globalization.CultureInfo In System.Globalization.CultureInfo.GetCultures(Globalization.CultureTypes.AllCultures)
    
            For Each strFormat As String In ci.DateTimeFormat.GetAllDateTimePatterns
    
                Dim boolResult As Boolean = True
                Try
    
    
                    Output0Buffer.OutDate = dtDate.ToString(strFormat)
    
                    boolResult = True
    
                Catch ex As Exception
    
                    boolResult = False
    
    
    
                End Try
    
                Using sw As New IO.StreamWriter("D:\Result.txt", True)
                    sw.WriteLine(ci.Name & ";" & dtDate.ToString(strFormat) & ";" & strFormat & ";" & boolResult.ToString)
                    sw.Close()
                End Using
    
            Next
    
    
    
        Next
    
    
    
    End Sub
    

    우선 모든 문화 정보를 통해 반복하고 그리고 난 점점 오전 그와 관련된 모든 날짜 형식을하고 그들을 반복. 그럼 난 dtDate가 포맷 된 문자열로 선언 된 날짜를 변환하고 출력 컬럼에 할당하는 것을 시도하고있다.

    그 수단이 허용되도록 DT_DBTIMESTAMP 출력 열에 지정된 형식 문자열 값을 할당하는 경우, 포맷 변환 내재적 인

    Output0Buffer.OutDate = dtDate.ToString(strFormat)
    

    그리고 여기에 결과 파일의 링크는 다음과 같습니다

    SQL 서버 날짜 암시 적 변환

    모든 언어 설정과 함께 올바르게 해석이 날짜 문자열 형식이 있습니다.

    yyyyMMdd
    yyyy-MM-ddTHH:mm:ss    (ISO8601)
    

    또한, 동일한 실험을하지만,하는 SqlCommand를 생성하고 실행하여이 시간을 반복 할 수 있습니다 :

    Dim sqlcmd as new SqlCommand("SELECT CONVERT(DATETIME,'" + dtdate.ToString(strFormat) + '")"
    
    sqlCmd.ExecuteReader()
    

    SQLCMD는 예외가 발생하는 경우 당신이 할 수있는 그 방법은 그 형식으로 변환 할 수 없음을 의미합니다.

  2. from https://stackoverflow.com/questions/42035354/ssis-source-format-implicit-conversion-for-datetime by cc-by-sa and MIT license