SSIS: „Conversion failed when converting date and/or time from character string”

30-Gru-2014

Jeżeli masz ten błąd to najprawdopodobniej… nie udaje się konwersja napisu na datę… Wiem, Ameryki nie odkryłem, ale sam ostatnio ugrzązłem w takim problemie. Serwer SQL z rosyjskim collation, laptop polski, SQL Server angielski i jak tu konwertować daty, panie premierze!?

Przyczyna:

Wysyłasz datę w formacie np. 20.12.2014, tymczasem podczas konwersji SQL lub SSIS lub jeszcze inne narzędzie zakłada, że data jest w formacie MM/DD/YYYY i klapa…

Rozwiązanie:

Wysyłaj daty w odpowiednim formacie…

Obejście:

1. Wysyłaj daty w formacie, co do którego inne narzędzia nie mają wątpliwości jak je parsować:

  • YYYY-MM-DD – rok na początku (4 cyfry) myślnik jako znak rozdzielający
  • YYYYMMDD – format ISO, bez żadnych znaków rozdzielających

2. Trochę szalone, ale co tam: konwertuj daty do napisów, a potem dalej pracuj na napisach. Np. w SQL użyj funkcji YEAR lub złożonego LEFT i CONVERT:

SELECT LEFT(CONVERT(NCHAR(50),GETDate(),102),4) –napis, który zawiera rok z daty

SELECT YEAR(GETDATE()) –liczba będąca rokiem

 

Tego typu zabawy pomogły mi znaleźć miejsce, gdzie daty rzeczywiście niepoprawnie były rozumiane podczas uruchomienia pakietu. A potem zostało już wyprowadzenie problemu. Jeśli wiesz co zepsuło działanie masz już 50% drogi do jego rozwiązania!

Dodaj komentarz:

Autor: Rafał Kraik