มีหลายรูปแบบการสนับสนุนจาก SQL Server เป็น - ดูMSDN หนังสือออนไลน์ในนักแสดงและแปลง รูปแบบเหล่านั้นส่วนใหญ่จะขึ้นอยู่กับการตั้งค่าที่คุณมี - ดังนั้นการตั้งค่าเหล่านี้อาจใช้งานได้บางครั้ง - และบางครั้งก็ไม่
วิธีการแก้ปัญหานี้คือการใช้รูปแบบวันที่ ISO-8601 (ดัดแปลงเล็กน้อย) ที่ SQL Server รองรับ - รูปแบบนี้ใช้งานได้ตลอดเวลา - ไม่ว่าภาษา SQL Server ของคุณและการตั้งค่ารูปแบบวันที่
รูปแบบ ISO-8601ได้รับการสนับสนุนโดย SQL Server มาในสองรสชาติ:
YYYYMMDD
สำหรับวันที่เพียง (ไม่มีส่วนเวลา); หมายเหตุที่นี่: ไม่มีขีดกลาง! นั่นสำคัญมาก! YYYY-MM-DD
คือไม่ได้เป็นอิสระจากการตั้งค่า dateformat ใน SQL Server ของคุณและจะไม่ทำงานในทุกสถานการณ์!
หรือ:
YYYY-MM-DDTHH:MM:SS
สำหรับวันที่และเวลา - โน้ตที่นี่: รูปแบบนี้มีขีดคั่น ( แต่พวกเขาสามารถจะละเว้น) และคงเป็นตัวคั่นระหว่างวันที่และเวลาส่วนหนึ่งของคุณT
DATETIME
สิ่งนี้ใช้ได้สำหรับ SQL Server 2000 และใหม่กว่า
ดังนั้นในกรณีที่เป็นรูปธรรมของคุณ - ใช้สตริงเหล่านี้:
insert into table1 values('2012-02-21T18:10:00', '2012-01-01T00:00:00');
และคุณควรจะดี (หมายเหตุ: คุณต้องใช้รูปแบบ24 ชั่วโมงสากลแทนรูปแบบ AM / PM 12 ชั่วโมงสำหรับเรื่องนี้)
อีกทางเลือกหนึ่ง : หากคุณใช้ SQL Server 2008หรือใหม่กว่าคุณสามารถใช้DATETIME2
ประเภทข้อมูล (แทนที่จะเป็นแบบธรรมดาDATETIME
) และปัจจุบันของคุณINSERT
จะทำงานได้โดยไม่มีปัญหา! :-) DATETIME2
ดีขึ้นมากและเลือกน้อยมากสำหรับการแปลง - และเป็นชนิดข้อมูลวันที่ / เวลาที่แนะนำสำหรับ SQL Server 2008 หรือใหม่กว่า
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
อย่าถามฉันว่าทำไมหัวข้อทั้งหมดนี้จึงค่อนข้างยุ่งยากและสับสน - นั่นเป็นวิธีที่มันเป็น แต่ด้วยYYYYMMDD
รูปแบบคุณควรใช้ได้กับ SQL Server ทุกรุ่นและสำหรับการตั้งค่าภาษาและรูปแบบวันที่ใน SQL Server ของคุณ