SQL Server tarafından desteklenen birçok biçim vardır - CAST ve CONVERT üzerinde MSDN Books Online'a bakın . Bu biçimlerin çoğu , hangi ayarlara sahip olduğunuza bağlıdır - bu nedenle, bu ayarlar bazen işe yarayabilir - bazen de çalışmayabilir.
Bunu çözmek için bir yol (biraz adapte) kullanmaktır ISO-8601 tarih biçimi , SQL Server tarafından desteklenmektedir - Bu biçim işleri hep - olursa olsun SQL Server dil ve dateformat ayarların.
ISO-8601 biçiminde SQL Server tarafından desteklenen iki şekilde sağlanır:
YYYYMMDDsadece tarihler için (zaman bölümü yok); not: tire yok! , bu çok önemli! YYYY-MM-DDolduğu DEĞİL SQL Server dateformat ayarlarından bağımsız ve olacak DEĞİL her durumda çalışmayabilir!
veya:
YYYY-MM-DDTHH:MM:SStarihler ve saatler için - burada not: Bu biçim vardır tire (ama olabilir atlanabilir) ve sabit Taramalarınızdan tarih ve saat kısmı arasında ayırıcı olarak DATETIME.
Bu, SQL Server 2000 ve daha yeni sürümler için geçerlidir.
Somut durumunuzda - şu dizeleri kullanın:
insert into table1 values('2012-02-21T18:10:00', '2012-01-01T00:00:00');
ve iyi olmalısınız (not: bunun için 12 saatlik ÖÖ / ÖS biçimi yerine uluslararası 24 saatlik biçimi kullanmanız gerekir ).
Alternatif olarak : SQL Server 2008 veya daha yeni bir DATETIME2sürüm kullanıyorsanız, veri türünü de (düz yerine DATETIME) kullanabilirsiniz ve akımınız INSERTherhangi bir sorun olmadan çalışır! :-) DATETIME2dönüşümler çok daha iyi ve çok daha az seçici - ve SQL Server 2008 veya daha yeni için tavsiye tarih / saat veri türleri zaten.
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
Bana tüm bu konunun neden bu kadar zor ve biraz kafa karıştırıcı olduğunu sorma - tam da bu şekilde. Ancak YYYYMMDDbiçimiyle, SQL Server'ın herhangi bir sürümü ve SQL Server'ınızdaki herhangi bir dil ve tarih biçimi ayarı için iyi olmalısınız.