将varchar转换为日期

时间:2010-10-06 21:06:27

标签: sql sql-server database tsql

我(不幸的是)有一些保存在varchar列中的日期。这些列包含以下格式的日期:

  

MMDDYY

例如:

  

010110

我需要将这些值导入到一个设置为datetime的表中,并将日期格式化为:

  

2010-09-17 00:00:00.000

如何将上面的字符串转换为下面的日期时间值?

7 个答案:

答案 0 :(得分:8)

CAST功能会执行此操作,问题是它会假设您前两位数是年份。这应该适合你:

SELECT CAST((RIGHT('010110',2) + LEFT('010110',4)) AS DATETIME)

这假设所有日期都是MMDDYY。

答案 1 :(得分:5)

这是一个解决方案

SELECT CAST(SUBSTRING(@date, 5, 2) + SUBSTRING(@date, 1, 4) AS DATETIME)

答案 2 :(得分:3)

将字符串转换为YYMMDD格式,您应该处于良好状态:

declare @x varchar(6)
set @x = '091710'

declare @d datetime

set @d = cast(RIGHT(@x,2) + LEFT(@x,4) as datetime)

select @d

答案 3 :(得分:2)

使用子字符串将相关部分抓取为'yyyy-mm-dd'格式,然后将cast格式化为日期时间:

cast(
    '20' + substring(col1,5,2) + '-' +
    substring(col1,1,2) + '-' +
    substring(col1,3,2)
    as datetime)

答案 4 :(得分:2)

MSDN中描述了支持的日期转换样式。坏消息是mmddyy没有风格。因此,您必须进行自定义格式化。如何完成取决于您的导入方式。它是SSIS ETL的一步吗?它是一次性表副本吗?

您可以直接从T-SQL自定义转换指定的格式:

declare @x varchar(6) = '010110';

select dateadd(month, cast(substring(@x, 1,2) as int)-1,
    dateadd(day, cast(substring(@x,3,2) as int)-1,
    dateadd(year, cast(substring(@x,5,2) as int),'01-01-2000')));

答案 5 :(得分:1)

尝试这样的事情:

DECLARE @OldTable table (col1 int, col2 char(1), col3 char(6))
DECLARE @NewTable table (col1 int, col2 char(1), col3 datetime)
INSERT @OldTable VALUES (1,'A','010110') --mmddyy = jan  1, 2010
INSERT @OldTable VALUES (1,'A','091710') --mmddyy = sep 17, 2010

INSERT INTO @NewTable
        (col1, col2, col3)
    SELECT
        col1, col2, RIGHT(col3,2) + LEFT(col3,4) --<< cast to datetime not needed... 
        FROM @OldTable                           --<< because @NewTable.col3 is datetime
        ORDER BY Col1

SELECT * FROM @NewTable

输出:

col1        col2 col3
----------- ---- -----------------------
1           A    2010-01-01 00:00:00.000
1           A    2010-09-17 00:00:00.000

(2 row(s) affected)

答案 6 :(得分:0)

这适用于varchar字符串长6个字符

CAST((RIGHT('130513',2) + ltrim(rtrim(right(left('130513', 4), 2))) + LEFT('130513',2) ) AS DATETIME)

这会将字符串转换为 2013年5月13日