ฉันจะแปลงสตริงเป็นวันที่ใน T-SQL ได้อย่างไร
กรณีทดสอบของฉันคือสตริง: '24.04.2012'
ฉันจะแปลงสตริงเป็นวันที่ใน T-SQL ได้อย่างไร
กรณีทดสอบของฉันคือสตริง: '24.04.2012'
คำตอบ:
CONVERT(datetime, '24.04.2012', 104)
ควรทำเคล็ดลับ ดูข้อมูลเพิ่มเติมได้ที่นี่: CAST และ CONVERT (Transact-SQL)
CONVERT(DateTime, DateField, 104)
สมมติว่าฐานข้อมูลเป็น MS SQL Server 2012 หรือสูงกว่านี่คือวิธีแก้ปัญหาที่ใช้งานได้ คำสั่งพื้นฐานประกอบด้วยการลองวิเคราะห์ในบรรทัด:
SELECT TRY_PARSE('02/04/2016 10:52:00' AS datetime USING 'en-US') AS Result;
นี่คือสิ่งที่เรานำมาใช้ในเวอร์ชันที่ใช้งานจริง:
UPDATE dbo.StagingInputReview
SET ReviewedOn =
ISNULL(TRY_PARSE(RTrim(LTrim(ReviewedOnText)) AS datetime USING 'en-US'), getdate()),
ModifiedOn = (getdate()), ModifiedBy = (suser_sname())
-- Check for empty/null/'NULL' text
WHERE not ReviewedOnText is null
AND RTrim(LTrim(ReviewedOnText))<>''
AND Replace(RTrim(LTrim(ReviewedOnText)),'''','') <> 'NULL';
คอลัมน์ ModifiedOn และ ModifiedBy มีไว้เพื่อวัตถุประสงค์ในการติดตามฐานข้อมูลภายในเท่านั้น
ดูการอ้างอิง Microsoft MSDN เหล่านี้:
แม้ว่าสิ่งที่แปลงจะใช้งานได้ แต่คุณไม่ควรใช้มัน คุณควรถามตัวเองว่าทำไมคุณถึงแยกวิเคราะห์ค่าสตริงใน SQL-Server หากนี่เป็นงานครั้งเดียวที่คุณแก้ไขข้อมูลบางอย่างด้วยตนเองคุณจะไม่ได้รับข้อมูลนั้นในอีกครั้งก็ใช้ได้ แต่หากแอปพลิเคชันใดใช้สิ่งนี้คุณควรเปลี่ยนแปลงบางอย่าง วิธีที่ดีที่สุดคือใช้ประเภทข้อมูล "วันที่" หากเป็นการป้อนข้อมูลของผู้ใช้สิ่งนี้จะยิ่งแย่ลงไปอีก จากนั้นคุณควรตรวจสอบไคลเอนต์ก่อน หากคุณต้องการส่งผ่านค่าสตริงที่ SQL-Server คาดหวังวันที่คุณสามารถใช้รูปแบบ ISO ('YYYYMMDD') ได้ตลอดเวลาและควรแปลงโดยอัตโนมัติ
คุณสามารถใช้ได้:
SELECT CONVERT(datetime, '24.04.2012', 103) AS Date
การอ้างอิง: CAST และ CONVERT (Transact-SQL)
CONVERT(DateTime, ExpireDate, 121) AS ExpireDate
จะทำในสิ่งที่จำเป็นผลลัพธ์:
2012-04-24 00:00:00.000