如何将ddmmyyyy转换为日期格式(dd / mm / yyyy)的varchar(8)?
我有一个存储过程,它接受一个date varchar(8)参数。
我希望在插入数据库之前将其转换为日期格式。 我试着用
INSERT INTO mytable(createdDate) VALUES (CONVERT(date, CONVERT(varchar(8), @date), 106));
错误:
Conversion failed when converting date and/or time from character string.
createdDate列的类型为:date
答案 0 :(得分:2)
ddmmyyyy
不是有效的日期格式。您需要先将该字符串转换为可以解析为DATE
/ DATETIME
的字符串。最快捷的方法可能就是将SUBSTRING
部分简化为mm/dd/yyyy
格式。这确实成功转换。但你有一个VARCHAR(8)
。因此,您需要将其增加到VARCHAR(10)
(或更好,只需CHAR(10)
),或者声明一个局部变量来保存更改后的值。
例如:
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
修改强>
实际上,我发现了一种稍微简单的方法。我从这个方法开始,但意识到它不适用ddmmyyyy
而不是mmddyyyy
。我不知道错过了dd/mm/yyyy
有适当的日期样式编号。因此,只需在传入的字符串中添加两个斜杠然后调用CONVERT
即可,但前提是您使用103
作为“样式”。和第一个解决方案一样,它要求将传入参数更改为VARCHAR(10)
或CHAR(10)
而不是VARCHAR(8)
,或者将局部变量创建为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
转换“样式”可在CAST and CONVERT的MSDN页面上找到。