Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Преобразуването не бе успешно при преобразуване на дата и/или час от символен низ при вмъкване на дата и час

Има много формати, поддържани от SQL Server - вижте онлайн книгите на MSDN за CAST и CONVERT. Повечето от тези формати са зависими на какви настройки имате – следователно тези настройки може да работят понякога – а понякога не.

Начинът за решаване на това е да се използва (леко адаптиран) формат за дата ISO-8601 който се поддържа от SQL Server - този формат работи винаги - независимо от настройките за език и формат на датата на вашия SQL Server.

Форматът ISO-8601 се поддържа от SQL Server и се предлага в два варианта:

  • YYYYMMDD само за дати (без времева част); забележка тук:без тирета! , това е много важно! YYYY-MM-DD еНЕ независимо от настройките на формата на датата във вашия SQL Server и НЕ работи във всички ситуации!

или:

  • YYYY-MM-DDTHH:MM:SS за дати и часове - забележете тук:този формат има тирета (но те могат да бъде пропуснат) и фиксиран T като разделител между датата и часа на вашия DATETIME .

Това е валидно за SQL Server 2000 и по-нови.

Така че във вашия конкретен случай - използвайте тези низове:

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

и трябва да сте добре (забележка:трябва да използвате международния 24-часов формат вместо 12-часов формат AM/PM за това).

Алтернативно :ако сте на SQL Server 2008 или по-нова, можете също да използвате DATETIME2 тип данни (вместо обикновен DATETIME ) и текущия ви INSERT просто ще работи без проблеми! :-) DATETIME2 е много по-добър и много по-малко придирчив към реализациите - и така или иначе е препоръчителните типове данни за дата/час за SQL Server 2008 или по-нова версия.

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  

Не ме питайте защо цялата тази тема е толкова сложна и донякъде объркваща - просто така е. Но с YYYYMMDD формат, трябва да сте добре за всяка версия на SQL Server и за всяка настройка за език и формат на дата във вашия 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. Функция LEN, която не включва крайни интервали в SQL Server

  2. Кой е най-дългият възможен телефонен номер в световен мащаб, който трябва да взема предвид в SQL varchar(дължина) за телефона

  3. върне стойност на позиция от STRING_SPLIT в SQL Server 2016

  4. Има ли начин да не се използват квадратни скоби в SQL Server?

  5. Изравняване на пресичащи се времеви интервали