Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Niejawna konwersja formatu źródłowego SSIS dla daty i godziny

Informacje ogólne

Są to domyślne formaty typów danych daty i godziny (przy konwersji z ciągu)

<>DT_DBDATErrrr-mm-ddDT_FILETIMErrrr-mm-dd gg:mm:ss:fffDT_DBTIMEhh:mm:ssDT_DBTIME2hh:mm:ss[.fffffff]DT_DBTIMESTAMPrrrr-mm-dd gg:mm-ff]yy_DB[. mm-dd gg:mm:ss[.ffffffff]DT_DBTIMESTAMPOFFSETrrrr-mm-dd gg:mm:ss[.ffffffff] [{+|-} gg:mm]

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Po co używać klauzuli INCLUDE podczas tworzenia indeksu?

  2. Znajdź skojarzenia między kontami pocztowymi bazy danych a zasadami bazy danych w SQL Server (T-SQL)

  3. Funkcje agregujące MIN i MAX w SQL Server

  4. SYSDATETIME() vs GETDATE() w SQL Server:jaka jest różnica?

  5. Instrukcja CASE w klauzuli WHERE w SQL Server 2008