Обща информация
Това са форматите по подразбиране на типовете данни за дата и време (при конвертиране от низ)
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
И мисля, че преобразуването на низ към дата зависи и от текущата ви информация за култура
По-подробна информация можете да намерите тук
- Типове данни на Integration Services
- ПРЕВОД НА ТИПОВЕ ДАННИ SSIS КЪМ SQL СЪРВЪР
Експерименти :
След като прочетох коментара ви, не намерих статия, свързана с въпроса ви, затова направих следните експерименти:
Неявно преобразуване на дата и час в SSIS
създадох пакет SSIS с Dataflowtask. в тази задача на поток от данни създадох компонент на скрипт (като източник) и дестинация на плосък файл. Скриптът има една изходна колона 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
деклариран към форматиран низ и го присвоете на колоната Output.
Така че, ако присвояването на стойност на низ с определен формат към изходната колона DT_DBTIMESTAMP е прието, това означава, че форматът е имплицитно преобразуван
Output0Buffer.OutDate = dtDate.ToString(strFormat)
А ето и връзката към файла с резултати:
- Result.txt
Неявно преобразуване на дата и време на SQL сървър
Има два формата на низове за дата и час, които се интерпретират правилно с всяка езикова настройка.
yyyyMMdd
yyyy-MM-ddTHH:mm:ss (ISO8601)
Също така можете да повторите същия експеримент, но този път като създадете SqlCommand
и изпълнението му:
Dim sqlcmd as new SqlCommand("SELECT CONVERT(DATETIME,'" + dtdate.ToString(strFormat) + '")"
sqlCmd.ExecuteReader()
По този начин можете, ако sqlcmd хвърли изключение, това означава, че форматът не може да бъде преобразуван.