나는 이것이 많은 답변을 가진 사악한 오래된 게시물이라는 것을 알고 있지만 많은 사람들은 물건을 분리하고 다시 묶어야하거나 OP 원본이 요청한 변환을 암시 적으로 수행 할 방법이 없다고 주장합니다. .
OP는 같은 질문을 가진 다른 사람들에게 쉬운 답변을 검토하고 희망적으로 제공하기 위해 '10 / 15 / 2008 10:06:32 PM '을 DATETIME으로 변환하는 방법을 물었습니다. 이제 SQL Server에는 일시적인 변환에 대한 일부 언어 종속성이 있지만 언어가 영어이거나 이와 비슷한 경우 간단한 문제가됩니다. 변환을 수행하고 형식에 대해 걱정하지 마십시오. 예를 들어 (CONVERT 또는 CAST를 사용할 수 있음) ...
SELECT UsingCONVERT = CONVERT(DATETIME,'10/15/2008 10:06:32 PM')
,UsingCAST = CAST('10/15/2008 10:06:32 PM' AS DATETIME)
;
... 따라서 다음과 같은 대답을 얻습니다. 둘 다 맞습니다.
TV 광고에서 말하는 것처럼 "하지만 기다리십시오! 아직 주문하지 마십시오! 추가 비용없이 더 많은 것을 할 수 있습니다!"
DATETIME으로 시간 변환의 진정한 힘을보고 DATETIME2로 알려진 실수를 부분적으로 살펴 보자. DATETIME이 자동으로 처리 할 수 있고 DATETIME2가 처리 할 수없는 왜곡 된 형식을 확인하십시오. 다음 코드를 실행하고 참조하십시오 ...
--===== 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)
;
그렇습니다. SQL Server DOES는 실제로 모든 종류의 이상한 o 시간 형식을 처리하는 매우 유연한 방법을 가지고 있으며 특별한 처리가 필요하지 않습니다. 24 시간에 추가 된 "PM"을 제거 할 필요조차 없었습니다. "PFM"(Pure Freakin 'Magic)입니다.
LANGUAGE에 따라 상황이 조금씩 다를 수 있습니다. 서버에 대해 선택한 것이지만 그 중 많은 부분이 처리 될 것입니다.
이러한 "자동 매직"변환은 새로운 것이 아닙니다. 그들은 정말로 먼 길을 간다.