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

How to convert varchar date into datetime in sql

我有这种格式的 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))

OP 想要 mmddyy,而普通的 convert 对此不起作用:

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 行受影响)

假设所有日期时间部分始终用 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

Mar 13 2015 9:30PM

2015-03-13 21:30:00.000

如果转换对您不起作用,那么您可以使用 mid to take date, month, year etc. And then use str_to_date 以所需格式构建日期时间。

oracle中使用to_date and this Whosebug link for taking substring

Sql 函数:

CONVERT(data_type(length),expression,style)

你可以试试这个:

CONVERT(datetime,@varCharDate,121)

有关更多信息,请参阅此 link

我想这就是您要找的:

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