繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM