[英]convert varchar(ddmmyyyy) to date format
如何将例如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
相比,该方法ddmmyyyy
用于mmddyyyy
。 我不知所措,没有为dd/mm/yyyy
提供合适的日期样式编号。 因此,只需在输入的字符串中添加两个斜杠,然后调用CONVERT
,但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上找到转换“样式”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.