ddmmyyyy
không phải là một định dạng ngày hợp lệ. Trước tiên, bạn cần biến chuỗi đó thành một chuỗi nào đó có thể được phân tích cú pháp thành DATE
/ DATETIME
. Cách nhanh nhất có thể chỉ là SUBSTRING
các mảnh thành một mm/dd/yyyy
định dạng. Điều đó không chuyển đổi thành công. Nhưng bạn có VARCHAR(8)
. Vì vậy, bạn cần phải tăng giá trị đó thành VARCHAR(10)
(hoặc tốt hơn, chỉ cần CHAR(10)
) hoặc khai báo một biến cục bộ để giữ giá trị đã thay đổi.
Ví dụ:
DECLARE @Date VARCHAR(8); -- input parameter
SET @Date = '25032014';
DECLARE @Date2 CHAR(10);
SET @Date2 = SUBSTRING(@Date, 3, 2)
+ '/' + SUBSTRING(@Date, 1, 2)
+ '/' + SUBSTRING(@Date, 5, 4);
SELECT @Date2, CONVERT(DATE, @Date2);
-- 03/25/2014 2014-03-25
CHỈNH SỬA: Thực ra, tôi đã tìm ra một cách đơn giản hơn một chút. Tôi đã bắt đầu với phương pháp này nhưng nhận ra rằng nó không hoạt động với ddmmyyyy
trái ngược với mmddyyyy
. Bằng cách nào đó, tôi đã bỏ lỡ rằng có một số kiểu ngày thích hợp cho dd/mm/yyyy
. Vì vậy, chỉ cần thêm hai dấu gạch chéo vào chuỗi đến và sau đó gọi CONVERT
hoạt động, nhưng chỉ khi bạn sử dụng 103
như là "phong cách". Và giống như giải pháp đầu tiên, nó yêu cầu thay đổi tham số đến thành VARCHAR(10)
hoặc CHAR(10)
thay vì VARCHAR(8)
hoặc tạo một biến cục bộ thành CHAR(10)
.
DECLARE @Date VARCHAR(8); -- input parameter
SET @Date = '25032014';
DECLARE @Date2 CHAR(10);
SET @Date2 = STUFF(STUFF(@Date, 3, 0, '/'), 6, 0, '/');
SELECT @Date2, CONVERT(DATE, @Date2, 103); -- 103 = dd/mm/yyyy
-- 25/03/2014 2014-03-25
Bạn có thể tìm thấy "kiểu" chuyển đổi trên trang MSDN cho CAST và CONVERT .