Informacje ogólne
Są to domyślne formaty typów danych daty i godziny (przy konwersji z ciągu)
Uwaga:DT_DATE i DT_DBTIMESTAMP mają tę samą metodę SET
Myślę, że konwersja ciągu znaków na datę zależy również od aktualnych informacji o kulturze
Więcej szczegółowych informacji można znaleźć tutaj
- Typy danych usług integracji
- TŁUMACZENIA TYPU DANYCH Z SSIS NA SERWER SQL
Eksperymenty:
Po przeczytaniu Twojego komentarza nie znalazłem żadnego artykułu związanego z Twoim pytaniem, więc przeprowadziłem następujące eksperymenty:
SSIS niejawna konwersja data-godzina
utworzyłem pakiet SSIS z Dataflowtask. w tym dataflowtask utworzyłem składnik skryptów (jako źródło) i miejsce docelowe pliku płaskiego. Skrypt ma jedną kolumnę wyjściową OutDate
typu DT_DbTimeStamp
Wewnątrz skryptu użyłem następującego kodu:
Prywatne dtDate As Date =#01/01/2016#Public Overrides Sub CreateNewOutputRows() Output0Buffer.AddRow() Używanie sw As New IO.StreamWriter("D:\Result.txt", False) sw. WriteLine("CultureInfo;Date;Format;Accepted") sw.Close() Zakończ używanie dla każdego ci jako System.Globalization.CultureInfo In System.Globalization.CultureInfo.GetCultures(Globalization.CultureTypes.AllCultures) Dla każdego strFormat jako ciąg w ci .DateTimeFormat.GetAllDateTimePatterns Dim boolResult As Boolean =True Spróbuj Output0Buffer.OutDate =dtDate.ToString(strFormat) boolResult =True Catch ex As Exception boolResult =False End Spróbuj użyć sw As New IO.StreamWriter("D:\Result". True) sw.WriteLine(ci.Name &";" &dtDate.ToString(strFormat) &";" &strFormat &";" &boolResult.ToString) sw.Close() Zakończ używając NextEnd Sub
Najpierw przeglądam wszystkie informacje o kulturze i pobieram wszystkie powiązane z nią formaty daty i godziny i zapętlam je. Następnie próbuję przekonwertować datę dtDate
zadeklarowane do sformatowanego ciągu i przypisać go do kolumny Output.
Jeśli więc przypisanie wartości ciągu o określonym formacie do kolumny wyjściowej DT_DBTIMESTAMP jest akceptowane, oznacza to, że format jest konwertowany niejawnie
Output0Buffer.OutDate =dtDate.ToString(strFormat)
A oto link do pliku wynikowego:
- Wynik.txt
Niejawna konwersja daty/godziny serwera SQL
Istnieją dwa formaty ciągów daty i godziny, które są poprawnie interpretowane przy dowolnym ustawieniu języka.
rrrrMMddyrrrr-MM-ddTHH:mm:ss (ISO8601)
Możesz również powtórzyć ten sam eksperyment, ale tym razem, tworząc SqlCommand
i wykonanie go:
Dim sqlcmd jako nowy SqlCommand("SELECT CONVERT(DATETIME,'" + dtdate.ToString(strFormat) + '")"sqlCmd.ExecuteReader()
W ten sposób możesz, jeśli sqlcmd zgłosi wyjątek, oznacza to, że format nie może zostać przekonwertowany.