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

Sql 将varchar(ddmmyyyy)转换为日期格式,sql,sql-server-2008,Sql,Sql Server 2008,例如,如何将varchar(8)格式的ddmmyyyy转换为日期格式(dd/mm/yyyy) 我有一个接受date varchar(8)参数的存储过程 我想在插入数据库之前将其转换为日期格式。 我试着用 INSERT INTO mytable(createdDate) VALUES (CONVERT(date, CONVERT(varchar(8), @date), 106)); 错误: Conversion failed when converting date and/or time fr

例如,如何将varchar(8)格式的ddmmyyyy转换为日期格式(dd/mm/yyyy)

我有一个接受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

ddmmyyyy
不是有效的日期格式。您需要首先将该字符串转换为可以解析为
日期
/
日期时间
。最快的方法可能是简单地
SUBSTRING
将片段转换成
mm/dd/yyyy
格式。它确实成功地转换了。但是您有一个
VARCHAR(8)
。因此,您需要将其增加为
VARCHAR(10)
(或者更好的是,只需
CHAR(10)
),或者声明一个局部变量来保存更改后的值

例如:

DECLARE@Date VARCHAR(8);--输入参数
设置@Date='25032014';
声明@Date2字符(10);
SET@Date2=子字符串(@Date,3,2)
+“/”+子字符串(@Date,1,2)
+“/”+子字符串(@Date,5,4);
选择@Date2,转换(日期,@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);--输入参数
设置@Date='25032014';
声明@Date2字符(10);
设置@Date2=STUFF(STUFF(@Date,3,0,“/”),6,0,“/”);
选择@Date2,CONVERT(DATE,@date2103);--103=日/月/年
-- 25/03/2014     2014-03-25

转换“样式”可以在的MSDN页面上找到。

为什么要再次将varchar转换为varchar?Convert(date,@date,106)是否不起作用?插入数据库时,不需要将varchar转换为date。它将由db自动处理。在MyTable(createdDate)中插入值('dd/mm/yyyyy'),sql server将为您计算出该值。请按照此链接查看@jadavparesh06它实际上是这样做的!我不知道。谢谢@爱德华:我在回答中增加了第二个例子,这是一个轻微的改进:)。