Bunun çok fazla cevabı olan kötü bir eski yazı olduğunu biliyorum, ancak bir çok insan şeyleri parçalayıp tekrar bir araya getirmeye GEREKMEDİĞİNİ düşünüyor veya OP orijinalinin istediği dönüşümü dolaylı olarak yapmanın hiçbir yolu olmadığını ısrar ediyorlar. .
Aynı soruyu inceleyen ve umarım diğerlerine kolay bir cevap vermek için OP '10/15/2008 10:06:32 PM' nin bir DATETIME'a nasıl dönüştürüleceğini sordu. Şimdi, SQL Server geçici dönüşümler için bazı dil bağımlılıklarına sahiptir, ancak dil İngilizce veya benzer bir şeyse, bu basit bir sorun haline gelir ... sadece dönüşümü yapın ve format hakkında endişelenmeyin. Örneğin (ve CONVERT veya CAST kullanabilirsiniz) ...
SELECT UsingCONVERT = CONVERT(DATETIME,'10/15/2008 10:06:32 PM')
,UsingCAST = CAST('10/15/2008 10:06:32 PM' AS DATETIME)
;
... ve her ikisi de doğru olan aşağıdaki cevapları üretir.
TV reklamlarında söyledikleri gibi, "Ama bekleyin! Henüz sipariş vermeyin! Hiçbir ekstra ücret ödemeden daha fazlasını yapabilir!"
DATETIME ile geçici dönüşümlerin gerçek gücünü görelim ve DATETIME2 olarak bilinen hatayı kısmen inceleyelim. DATETIME'ın otomatik olarak işleyebildiği ve DATETIME2'nin yapamadığı whacky biçimlerine bakın. Aşağıdaki kodu çalıştırın ve bakın ...
--===== Set the language for this example.
SET LANGUAGE ENGLISH --Same a US-English
;
--===== Use a table constructor as if it were a table for this example.
SELECT *
,DateTimeCONVERT = TRY_CONVERT(DATETIME,StringDT)
,DateTimeCAST = TRY_CAST(StringDT AS DATETIME)
,DateTime2CONVERT = TRY_CONVERT(DATETIME2,StringDT)
,DateTime2CAST = TRY_CAST(StringDT AS DATETIME2)
FROM (
VALUES
('Same Format As In The OP' ,'12/16/2001 01:51:01 PM')
,('Almost Normal' ,'16 December, 2001 1:51:01 PM')
,('More Normal' ,'December 16, 2001 01:51:01 PM')
,('Time Up Front + Spaces' ,' 13:51:01 16 December 2001')
,('Totally Whacky Format #01' ,' 16 13:51:01 December 2001')
,('Totally Whacky Format #02' ,' 16 December 13:51:01 2001 ')
,('Totally Whacky Format #03' ,' 16 December 01:51:01 PM 2001 ')
,('Totally Whacky Format #04' ,' 2001 16 December 01:51:01 PM ')
,('Totally Whacky Format #05' ,' 2001 December 01:51:01 PM 16 ')
,('Totally Whacky Format #06' ,' 2001 16 December 01:51:01 PM ')
,('Totally Whacky Format #07' ,' 2001 16 December 13:51:01 PM ')
,('Totally Whacky Format #08' ,' 2001 16 13:51:01 PM December ')
,('Totally Whacky Format #09' ,' 13:51:01 PM 2001.12/16 ')
,('Totally Whacky Format #10' ,' 13:51:01 PM 2001.December/16 ')
,('Totally Whacky Format #11' ,' 13:51:01 PM 2001.Dec/16 ')
,('Totally Whacky Format #12' ,' 13:51:01 PM 2001.Dec.16 ')
,('Totally Whacky Format #13' ,' 13:51:01 PM 2001/Dec.16')
,('Totally Whacky Format #14' ,' 13:51:01 PM 2001 . 12/16 ')
,('Totally Whacky Format #15' ,' 13:51:01 PM 2001 . December / 16 ')
,('Totally Whacky Format #16' ,' 13:51:01 PM 2001 . Dec / 16 ')
,('Totally Whacky Format #17' ,' 13:51:01 PM 2001 . Dec . 16 ')
,('Totally Whacky Format #18' ,' 13:51:01 PM 2001 / Dec . 16')
,('Totally Whacky Format #19' ,' 13:51:01 PM 2001 . Dec - 16 ')
,('Totally Whacky Format #20' ,' 13:51:01 PM 2001 - Dec - 16 ')
,('Totally Whacky Format #21' ,' 13:51:01 PM 2001 - Dec . 16')
,('Totally Whacky Format #22' ,' 13:51:01 PM 2001 - Dec / 16 ')
,('Totally Whacky Format #23' ,' 13:51:01 PM 2001 / Dec - 16')
,('Just the year' ,' 2001 ')
,('YYYYMM' ,' 200112 ')
,('YYYY MMM' ,'2001 Dec')
,('YYYY-MMM' ,'2001-Dec')
,('YYYY . MMM' ,'2001 . Dec')
,('YYYY / MMM' ,'2001 / Dec')
,('YYYY - MMM' ,'2001 / Dec')
,('Forgot The Spaces #1' ,'2001December26')
,('Forgot The Spaces #2' ,'2001Dec26')
,('Forgot The Spaces #3' ,'26December2001')
,('Forgot The Spaces #4' ,'26Dec2001')
,('Forgot The Spaces #5' ,'26Dec2001 13:51:01')
,('Forgot The Spaces #6' ,'26Dec2001 13:51:01PM')
,('Oddly, this doesn''t work' ,'2001-12')
,('Oddly, this doesn''t work' ,'12-2001')
) v (Description,StringDT)
;
Yani, evet ... SQL Server aslında her türlü garip-geçici formatları işlemek için oldukça esnek bir yönteme sahiptir ve özel bir işleme gerek yoktur. 24 Saat sürelerine eklenen "PM" lerin kaldırılması bile gerekmiyordu. Bu "PFM" (Pure Freakin 'Magic).
LANGUAGE, sunucunuz için seçtiğiniz şeye bağlı olarak biraz değişecektir, ancak birçoğu her iki şekilde de ele alınacaktır.
Ve bu "otomatik büyü" dönüşümleri yeni bir şey değil. Çok uzun bir yol kat ediyorlar.