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

Konwersja nie powiodła się podczas konwersji daty i/lub czasu z ciągu znaków podczas wstawiania daty i godziny

Istnieje wiele formatów obsługiwanych przez SQL Server — zobacz MSDN Books Online na temat CAST i CONVERT. 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 jest użycie (nieznacznie dostosowanego) 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 obsługiwany przez SQL Server jest dostępny w dwóch wersjach:

  • YYYYMMDD tylko dla dat (bez 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 (ale mogą należy pominąć) i stałe T jako ogranicznik między częścią daty i godziny w DATETIME .

Dotyczy to SQL Server 2000 i nowszych.

Więc w twoim konkretnym przypadku - użyj tych ciągów:

insert into table1 values('2012-02-21T18:10:00', '2012-01-01T00:00:00');

i powinno być dobrze (uwaga:musisz użyć międzynarodowego 24-godzinnego w tym przypadku zamiast 12-godzinnego formatu AM/PM).

Alternatywnie :jeśli korzystasz z SQL Server 2008 lub nowszy, możesz również użyć DATETIME2 typ danych (zamiast zwykłego DATETIME ) i aktualne INSERT po prostu działałby bez żadnych problemów! :-) DATETIME2 jest o wiele lepszy i mniej wybredny w przypadku konwersji - i tak jest to zalecane typy danych daty/godziny dla SQL Server 2008 lub nowszego.

SELECT
   CAST('02-21-2012 6:10:00 PM' AS DATETIME2),     -- works just fine
   CAST('01-01-2012 12:00:00 AM' AS DATETIME2)   -- works just fine  

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. datetime vs datetimeoffset w SQL Server:jaka jest różnica?

  2. podstawowa wstawka zbiorcza pyodbc

  3. Jak mogę wstawić 10 milionów rekordów w najkrótszym możliwym czasie?

  4. Jak zautomatyzować zadanie generowania skryptów w programie SQL Server Management Studio 2008?

  5. Połącz dwie tabele, które nie mają wspólnych pól