ฉันรู้ว่านี่เป็นโพสต์เก่าที่ชั่วร้ายที่มีคำตอบมากมาย แต่ผู้คนจำนวนมากคิดว่าพวกเขาต้องการแยกสิ่งต่าง ๆ ออกจากกันและนำพวกเขากลับมารวมกันหรือยืนยันว่าไม่มีทางที่จะแปลงโดยปริยาย .
ในการตรวจสอบและหวังว่าจะให้คำตอบง่ายๆแก่ผู้อื่นด้วยคำถามเดียวกัน 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)
;
... และนั่นเป็นคำตอบที่ถูกต้องทั้งคู่
อย่างที่พวกเขาพูดในโฆษณาทางทีวี "แต่เดี๋ยวก่อน! อย่าสั่งเลย! โดยไม่มีค่าใช้จ่ายเพิ่มเติม
เรามาดูพลังที่แท้จริงของการแปลงชั่วคราวกับ 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 มีวิธีการที่ยืดหยุ่นในการจัดการรูปแบบชั่วคราวที่แปลกและไม่จำเป็นต้องมีการจัดการพิเศษ เราไม่จำเป็นต้องลบ "PM" ที่เพิ่มไปยังเวลา 24 ชั่วโมงด้วยซ้ำ มันคือ "PFM" (Magic Freakin 'Pure)
สิ่งที่จะแตกต่างกันเล็กน้อยขึ้นอยู่กับภาษาที่คุณเลือกสำหรับเซิร์ฟเวอร์ของคุณ แต่จำนวนมากจะได้รับการจัดการอย่างใดอย่างหนึ่ง
และการแปลง "auto-magic" เหล่านี้ไม่ใช่สิ่งใหม่ พวกมันกลับไปไกลจริงๆ