将varchar(ddmmyyyy)转换为日期格式

时间:2014-10-13 05:18:16

标签: sql sql-server-2008

如何将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

1 个答案:

答案 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页面上找到。