日期时间的 SSIS 源格式隐式转换
SSIS Source Format Implicit Conversion for Datetime
有谁知道显示 SSIS 中不同数据类型支持哪些日期格式的图表?例如,DT_DBTimestamp
是否支持 1-Jan
格式。我试着寻找但找不到任何东西。
我之所以问,是因为我发现当我尝试执行 Convert(datetime, '1-Jan')
时,它失败了,这正是我所期望的。但是,当我将相同的值拉入 SSIS 并进入 DT_DBTimestamp
时,它将隐式地将其标识为 1/1/2017
而不是将行重定向为数据类型转换错误。
一般信息
这些是日期时间数据类型的默认格式(从字符串转换时)
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 method
而且我认为将字符串转换为日期还取决于您当前的文化信息
可在此处找到更详细的信息
实验:
阅读您的评论后,我没有找到任何与您的问题相关的文章,所以我做了以下实验:
SSIS 隐式日期时间转换
我创建了一个带有数据流任务的 SSIS 包。在此数据流任务中,我创建了一个脚本组件(作为源)和一个平面文件目标。该脚本有一个类型为 DT_DbTimeStamp
的输出列 OutDate
在脚本中我使用了以下代码:
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)
这是结果文件的 Link:
SQL 服务器日期时间隐式转换
有两种日期时间字符串格式可以在任何语言设置下正确解释。
yyyyMMdd
yyyy-MM-ddTHH:mm:ss (ISO8601)
此外,您可以重复相同的实验但是这次通过创建一个 SqlCommand
并执行它:
Dim sqlcmd as new SqlCommand("SELECT CONVERT(DATETIME,'" + dtdate.ToString(strFormat) + '")"
sqlCmd.ExecuteReader()
如果 sqlcmd 抛出异常,则表示无法转换格式。
有谁知道显示 SSIS 中不同数据类型支持哪些日期格式的图表?例如,DT_DBTimestamp
是否支持 1-Jan
格式。我试着寻找但找不到任何东西。
我之所以问,是因为我发现当我尝试执行 Convert(datetime, '1-Jan')
时,它失败了,这正是我所期望的。但是,当我将相同的值拉入 SSIS 并进入 DT_DBTimestamp
时,它将隐式地将其标识为 1/1/2017
而不是将行重定向为数据类型转换错误。
一般信息
这些是日期时间数据类型的默认格式(从字符串转换时)
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 method
而且我认为将字符串转换为日期还取决于您当前的文化信息
可在此处找到更详细的信息
实验:
阅读您的评论后,我没有找到任何与您的问题相关的文章,所以我做了以下实验:
SSIS 隐式日期时间转换
我创建了一个带有数据流任务的 SSIS 包。在此数据流任务中,我创建了一个脚本组件(作为源)和一个平面文件目标。该脚本有一个类型为 DT_DbTimeStamp
的输出列 OutDate
在脚本中我使用了以下代码:
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)
这是结果文件的 Link:
SQL 服务器日期时间隐式转换
有两种日期时间字符串格式可以在任何语言设置下正确解释。
yyyyMMdd
yyyy-MM-ddTHH:mm:ss (ISO8601)
此外,您可以重复相同的实验但是这次通过创建一个 SqlCommand
并执行它:
Dim sqlcmd as new SqlCommand("SELECT CONVERT(DATETIME,'" + dtdate.ToString(strFormat) + '")"
sqlCmd.ExecuteReader()
如果 sqlcmd 抛出异常,则表示无法转换格式。