Jeśli chcesz określić daty i godziny za pomocą ciągów, użyj bezpiecznego , format niezależny od języka.
W SQL Server jest to format ISO-8601 (nieco dostosowany) i obsługuje zasadniczo dwa bezpieczne formaty dla DATETIME
które zawsze działają - niezależnie od ustawień języka, regionu i formatu daty:
YYYYMMDD (e.g. 20121231 for 31st of December 2012) if you need date only
YYYY-MM-DDTHH:mm:ss (e.g. 2012-12-31T21:05:00 for 31st of December 2012, 9:05pm)
Uwaga:
-
pierwszy format zawierający tylko datę bez myślników lub ograniczniki!
-
drugi format ma myślniki na datę (można je również pominąć) i jest stały
T
jako separator między datą a godziną w łańcuchu
Aktualizacja: zgodnie z twoim ostatnim komentarzem (w różnych domyślnych językach dla dwóch użytkowników) - spróbuj tego:
-- this is how your `SA` interprets the string as datetime....
SET LANGUAGE english
SELECT CAST('2012-11-30 23:59' AS DATETIME)
Działa dobrze...
-- this is how your British user interprets teh string as datetime
SET LANGUAGE british
SELECT CAST('2012-11-30 23:59' AS DATETIME)
To próbuje zinterpretować ciąg jako 11. 30. miesiąca 2012 i oczywiście to się nie udaje...