如何将例如varchar(8)的ddmmyyyy转换为日期格式(dd / mm / yyyy)?
我有一个接受日期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列的类型为:日期
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
可以在MSDN页面上找到CAST和CONVERT的转换“样式” 。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句