Nếu bạn gặp lỗi SQL Server Msg 241 có nội dung Chuyển đổi không thành công khi chuyển đổi ngày và / hoặc giờ từ chuỗi ký tự , có thể là do bạn đang cố chuyển đổi một chuỗi thành giá trị ngày / giờ, nhưng chuỗi cụ thể đó không thể chuyển đổi thành giá trị ngày / giờ.
Ví dụ về Lỗi
Dưới đây là một ví dụ về mã tạo ra lỗi:
SELECT CAST('Tomorrow' AS date);
Kết quả:
Msg 241, Mức 16, Trạng thái 1, Dòng 1 Chuyển đổi không thành công khi chuyển đổi ngày và / hoặc giờ từ chuỗi ký tự.
Tại đây, chúng tôi đã cố gắng chuyển đổi chuỗi Tomorrow
đến ngày date
nhập, nhưng Tomorrow
không phải là ngày hợp lệ có thể được chuyển đổi thành date
loại.
Máy chủ SQL không thể chuyển đổi chuỗi thành date
và do đó, nó trả về một lỗi.
Giải pháp 1
Cách rõ ràng nhất để khắc phục điều này là thay đổi chuỗi để giống với một ngày thực tế.
Nếu bạn đang chuyển một cột, hãy kiểm tra xem bạn đã chọn đúng cột chưa. Tương tự nếu bạn đang chuyển một biến - hãy kiểm tra xem đó có phải là biến phù hợp hay không.
Ví dụ:chuyển đổi sau thành công:
SELECT CAST('20 Feb 2030' AS date);
Kết quả:
2030-02-20
Tùy thuộc vào định dạng của ngày nhập, bạn nên sử dụng CONVERT()
để bạn có thể chỉ định định dạng của biểu thức ngày đầu vào.
Ví dụ:
SELECT
CONVERT(date, '03/02/2030', 101) AS 'US with century',
CONVERT(date, '03/02/30', 1) AS 'US without century',
CONVERT(date, '03/02/2030', 103) AS 'British with century',
CONVERT(date, '03/02/30', 3) AS 'US without century';
Kết quả:
+ ------------------- + ---------------------- + --- --------------------- + ---------------------- + | Mỹ với thế kỷ | Mỹ không có thế kỷ | Người Anh với thế kỷ | Mỹ không có thế kỷ || ------------------- + ---------------------- + - ---------------------- + ---------------------- || 2030-03-02 | 2030-03-02 | 2030-02-03 | 2030-02-03 | + ------------------- + ---------------------- + ------------------------ + ---------------------- +Giải pháp 2
Một cách khác để xử lý lỗi là sử dụng
TRY_CAST()
hoặcTRY_CONVERT()
. Các hàm này trả vềNULL
thay vì lỗi.Ví dụ:
SELECT TRY_CAST('Tomorrow' AS date);
Kết quả:
NULLTuy nhiên, điều này không nhất thiết phải giải quyết vấn đề cơ bản mà nó chỉ ẩn nó đi. Chuyển đổi vẫn không thể diễn ra.
Trong mọi trường hợp, nó vẫn có thể là một lựa chọn khả thi, tùy thuộc vào nhu cầu của bạn.
Giải pháp 3
Một cách khác để xử lý lỗi là chuyển đổi chuỗi thành một kiểu dữ liệu khác. Rõ ràng, điều này là không tốt nếu bạn muốn kết thúc bằng
date
nhập, nhưng có lẽ lỗi xảy ra do bạn đã vô tình chỉ địnhdate
nhập thay vì loại khác.Ví dụ:
SELECT CAST('Wednesday' AS char(3));
Kết quả:
Thứ tư