sql >> データベース >  >> RDS >> Sqlserver

日時のSSISソース形式の暗黙的な変換

    一般情報

    これらは、日時データ型のデフォルト形式です(文字列から変換する場合)

    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からSQLサーバーへのデータ型の変換

    実験:

    コメントを読んだ後、あなたの質問に関連する記事が見つからなかったので、次の実験を行いました:

    SSISの暗黙的な日時変換

    Dataflowtaskを使用してSSISパッケージを作成しました。このデータフロータスクでは、スクリプトコンポーネント(ソースとして)とフラットファイルの宛先を作成しました。スクリプトには1つの出力列OutDateがあります タイプ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)
    

    結果ファイルのリンクは次のとおりです:

    • Result.txt

    SQLServer日時の暗黙的な変換

    どの言語設定でも正しく解釈される2つの日時文字列形式があります。

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

    また、同じ実験を繰り返すこともできますが、今回はSqlCommandを作成します。 そしてそれを実行する:

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

    そうすれば、sqlcmdが例外をスローした場合、フォーマットを変換できないことを意味します。




    1. OracleWarehouseBuilderを使用したデータウェアハウスETLデータプロファイリング

    2. 修正:MariaDBの「information_schemaの不明なテーブル「ロケール」」

    3. トランザクションログ構成の問題

    4. 実用的な例を使用したSQLiteCROSSJOIN