Làm cách nào để chuyển đổi Chuỗi thành Ngày trong T-SQL?
Trường hợp thử nghiệm của tôi là chuỗi: '24.04.2012'
Làm cách nào để chuyển đổi Chuỗi thành Ngày trong T-SQL?
Trường hợp thử nghiệm của tôi là chuỗi: '24.04.2012'
Câu trả lời:
CONVERT(datetime, '24.04.2012', 104)
Nên làm thủ thuật. Xem tại đây để biết thêm thông tin: CAST và CONVERT (Transact-SQL)
CONVERT(DateTime, DateField, 104)
Giả sử rằng cơ sở dữ liệu là MS SQL Server 2012 trở lên, đây là một giải pháp hoạt động. Câu lệnh cơ bản chứa try-parse trong dòng:
SELECT TRY_PARSE('02/04/2016 10:52:00' AS datetime USING 'en-US') AS Result;
Đây là những gì chúng tôi đã triển khai trong phiên bản sản xuất:
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';
Các cột ModifiedOn và ModifiedBy chỉ dành cho mục đích theo dõi cơ sở dữ liệu nội bộ.
Xem thêm các tham chiếu MSDN của Microsoft này:
Mặc dù điều CONVERT hoạt động, nhưng bạn thực sự không nên sử dụng nó. Bạn nên tự hỏi tại sao bạn lại phân tích cú pháp các giá trị chuỗi trong SQL-Server. Nếu đây là công việc một lần mà bạn đang sửa một số dữ liệu theo cách thủ công, bạn sẽ không nhận được dữ liệu đó vào lần khác, điều này không sao cả, nhưng nếu bất kỳ ứng dụng nào đang sử dụng điều này, bạn nên thay đổi một số thứ. Cách tốt nhất là sử dụng kiểu dữ liệu "ngày tháng". Nếu đây là đầu vào của người dùng, điều này thậm chí còn tồi tệ hơn. Sau đó, trước tiên bạn nên thực hiện một số kiểm tra trong ứng dụng khách. Nếu bạn thực sự muốn chuyển các giá trị chuỗi mà SQL-Server mong đợi một ngày, bạn luôn có thể sử dụng định dạng ISO ('YYYYMMDD') và nó sẽ tự động chuyển đổi.
Bạn có thể dùng:
SELECT CONVERT(datetime, '24.04.2012', 103) AS Date
Tham khảo: CAST và CONVERT (Transact-SQL)
CONVERT(DateTime, ExpireDate, 121) AS ExpireDate
sẽ làm những gì cần thiết, kết quả:
2012-04-24 00:00:00.000