Има много формати, поддържани от 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.