一般情報
これらは、日時データ型のデフォルト形式です(文字列から変換する場合)
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が例外をスローした場合、フォーマットを変換できないことを意味します。