ddmmyyyy
bukan format tanggal yang valid. Anda harus terlebih dahulu membuat string itu menjadi sesuatu yang dapat diuraikan sebagai DATE
/ DATETIME
. Cara tercepat mungkin cukup SUBSTRING
potongan menjadi mm/dd/yyyy
format. Itu berhasil mengkonversi. Tetapi Anda memiliki VARCHAR(8)
. Jadi, Anda perlu meningkatkannya menjadi VARCHAR(10)
(atau lebih baik lagi, cukup CHAR(10)
), atau mendeklarasikan variabel lokal untuk menyimpan nilai yang diubah.
Misalnya:
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
EDIT: Sebenarnya, saya menemukan cara yang sedikit lebih sederhana. Saya memulai dengan metode ini tetapi menyadari bahwa itu tidak berhasil dengan ddmmyyyy
sebagai lawan dari mmddyyyy
. Saya entah bagaimana melewatkan bahwa ada nomor gaya tanggal yang sesuai untuk dd/mm/yyyy
. Jadi, cukup tambahkan dua garis miring ke string yang masuk dan kemudian panggil CONVERT
berfungsi, tetapi hanya jika Anda menggunakan 103
sebagai "gaya". Dan seperti solusi pertama, ini memerlukan perubahan parameter yang masuk menjadi VARCHAR(10)
atau CHAR(10)
bukannya VARCHAR(8)
, atau membuat variabel lokal menjadi 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
Konversi "gaya" dapat ditemukan di halaman MSDN untuk CAST dan CONVERT .