如何在sql中将varchar日期转换为datetime

时间:2015-03-14 15:15:17

标签: sql sql-server tsql datetime varchar

我有这种格式的varchar日期:

03/13/2015 : 2130

我希望将其转换为日期时间:

2015-03-13 21:30:00.000

我见过这样的例子,但对我正在寻找的东西不起作用

DECLARE @Date char(8)
set @Date='12312009'
SELECT CONVERT(datetime,RIGHT(@Date,4)+LEFT(@Date,2)+SUBSTRING(@Date,3,2))

5 个答案:

答案 0 :(得分:2)

这将有效,假设所有日期时间部分都以0一致填充。

DECLARE @Input VARCHAR(50);
SET @Input = '03/13/2015 : 2130';
SET @Input = LEFT(@Input, 10) + ' ' + LEFT(RIGHT(@Input, 4), 2) + ':' + RIGHT(RIGHT(@Input, 4), 2);

PRINT @Input;
PRINT CONVERT(DATETIME, @Input);
PRINT CONVERT(VARCHAR(50), CONVERT(DATETIME, @Input), 121);

输出:

  

03/13/2015 21:30

     

2015年3月13日晚上9:30

     

2015-03-13 21:30:00.000

答案 1 :(得分:1)

OP希望mmddyy和普通的转换器不适用于此:

select convert(datetime,'12312009')

Msg 242, Level 16, State 3, Line 1 
The conversion of a char data type to a datetime data type resulted in 
an out-of-range datetime value

所以试试这个:

DECLARE @Date char(8)
set @Date='12312009'
SELECT CONVERT(datetime,RIGHT(@Date,4)+LEFT(@Date,2)+SUBSTRING(@Date,3,2))

输出:


2009-12-31 00:00:00.000

(1行受影响)

答案 2 :(得分:1)

我认为这是你正在寻找的东西:

DECLARE @Date VARCHAR(20)
SET @Date = '03/13/2015 : 2130'

-- Format the date string
SET @Date = LEFT(@Date, 10) + ' ' + SUBSTRING(@Date, 14, 2) + ':' + SUBSTRING(@Date, 16, 2)

-- convert to date
Select CONVERT(varchar, CONVERT(DATETIME, @Date), 121)

SQL Fiddle

More Info

答案 3 :(得分:0)

如果转换不适合您,则可以使用mid获取日期,月份,年份等。然后使用str_to_date以所需格式构建日期时间。

oracle 中使用to_date和此stackoverflow链接以获取substring

答案 4 :(得分:0)

Sql功能:

CONVERT(data_type(length),expression,style)

你可以试试这个:

CONVERT(datetime,@varCharDate,121)

有关详情,请参阅此link