Tôi biết đây là một bài viết cũ độc ác với rất nhiều câu trả lời nhưng rất nhiều người nghĩ rằng họ CẦN phải phá vỡ mọi thứ và đặt chúng lại với nhau hoặc họ khẳng định rằng không có cách nào để thực hiện chuyển đổi mà OP ban đầu yêu cầu .
Để xem xét và hy vọng cung cấp một câu trả lời dễ dàng cho những người khác có cùng câu hỏi, OP đã hỏi cách chuyển đổi '10 / 15/2008 10:06:32 PM 'thành một cơ sở dữ liệu. Bây giờ, SQL Server có một số phụ thuộc ngôn ngữ cho chuyển đổi tạm thời nhưng nếu ngôn ngữ là tiếng Anh hoặc một cái gì đó tương tự, thì điều này trở thành một vấn đề đơn giản ... chỉ cần thực hiện chuyển đổi và đừng lo lắng về định dạng. Ví dụ: (và bạn có thể sử dụng CONVERT hoặc CAST) ...
SELECT UsingCONVERT = CONVERT(DATETIME,'10/15/2008 10:06:32 PM')
,UsingCAST = CAST('10/15/2008 10:06:32 PM' AS DATETIME)
;
... Và điều đó tạo ra các câu trả lời sau, cả hai đều đúng.
Giống như họ nói trên quảng cáo trên TV, "Nhưng đợi đã! Đừng đặt hàng! Không mất thêm chi phí, nó có thể làm được nhiều hơn thế!"
Chúng ta hãy xem sức mạnh thực sự của các chuyển đổi tạm thời với DATETIME và kiểm tra một phần lỗi được gọi là DATETIME2. Kiểm tra các định dạng kỳ quặc mà DATETIME có thể xử lý tự động một cách kỳ diệu và rằng DATETIME2 không thể. Chạy đoạn mã sau và xem ...
--===== 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)
;
Vì vậy, yeah ... SQL Server DOES thực sự có một phương pháp khá linh hoạt để xử lý tất cả các loại định dạng tạm thời kỳ lạ và không cần xử lý đặc biệt. Chúng tôi thậm chí không cần phải xóa "PM" đã được thêm vào 24 giờ. Đó là "PFM" (Ma thuật thuần túy của Freakin).
Mọi thứ sẽ thay đổi một chút tùy thuộc vào NGÔN NGỮ là bạn đã chọn cho máy chủ của mình nhưng toàn bộ nó sẽ được xử lý theo một trong hai cách.
Và những chuyển đổi "tự động ma thuật" này không phải là một cái gì đó mới. Họ đi một chặng đường dài thực sự trở lại.