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:
YYYYMMDD
sadece tarihler için (zaman bölümü yok); not: tire yok! , bu çok önemli! YYYY-MM-DD
olduğu DEĞİL SQL Server dateformat ayarlarından bağımsız ve olacak DEĞİL her durumda çalışmayabilir!
veya:
YYYY-MM-DDTHH:MM:SS
tarihler ve saatler için - burada not: Bu biçim vardır tire (ama olabilir atlanabilir) ve sabit T
aramaları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 DATETIME2
sürüm kullanıyorsanız, veri türünü de (düz yerine DATETIME
) kullanabilirsiniz ve akımınız INSERT
herhangi bir sorun olmadan çalışır! :-) DATETIME2
dö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 YYYYMMDD
biç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.