SQL Server nie przechowuje DateTime
w dowolnym formacie ciągu - jest przechowywana jako 8-bajtowa wartość liczbowa.
Różne ustawienia (język, format daty) wpływają tylko na to, jak DateTime
jest wyświetlany w SQL Server Management Studio — lub jak jest analizowany podczas próby konwersji ciągu na DateTime
.
Istnieje wiele formatów obsługiwanych przez SQL Server — zobacz MSDN Books Online na CAST i KONWERSJA . Większość z tych formatów jest zależna jakie masz ustawienia — dlatego te ustawienia mogą czasami działać — a czasami nie.
Sposobem na rozwiązanie tego problemu jest użycie formatu daty ISO-8601 który jest obsługiwany przez SQL Server - ten format działa zawsze - niezależnie od ustawień języka SQL Server i formatu daty.
format ISO-8601 jest obsługiwany przez SQL Server jest dostępny w dwóch wersjach:
YYYYMMDD
tylko dla dat (bez części czasu) – uwaga tutaj:bez myślników! , to bardzo ważne!YYYY-MM-DD
jest NIE niezależnie od ustawień formatu daty na serwerze SQL Server i NIE pracuj we wszystkich sytuacjach!
lub:
YYYY-MM-DDTHH:MM:SS
dla dat i godzin – uwaga tutaj:ten format ma myślniki.
Dotyczy to SQL Server 2000 i nowszych.
Jeśli używasz SQL Server 2008 i DATE
typ danych (tylko DATE
- nie DATETIME
!), to rzeczywiście możesz również użyć YYYY-MM-DD
format i będzie działać również z dowolnymi ustawieniami na serwerze SQL.
Nie pytaj mnie, dlaczego cały ten temat jest tak zawiły i nieco zagmatwany – tak po prostu jest. Ale z YYYYMMDD
format, powinieneś być w porządku dla dowolnej wersji SQL Server oraz dla dowolnego języka i ustawienia formatu daty w twoim SQL Server.