简体   繁体   English

Varchar到Datetime的转换-SQL Server

[英]Varchar to Datetime conversion - SQL Server

How can I convert a varchar column into a datetime field. 如何将varchar列转换为datetime字段。 The varchar field has the date and time in the below format varchar字段具有以下格式的日期和时间

t_time
-------
20140314163955

The below doesn't work 以下不起作用

CAST(t_time AS datetime)

Thanks in advance. 提前致谢。

One option, in order to keep it clean would be to use a function, like the one below: 为了保持整洁,一种选择是使用一种功能,例如下面的一种:

CREATE FUNCTION CONVERT_DATETIME_STRING_TO_DATE (@StringDate NVARCHAR(14))
RETURNS DATETIME
AS
BEGIN
DECLARE @RESULT DATETIME

SELECT @RESULT = CONVERT(datetime, substring(@StringDate, 0, 9))
SELECT @RESULT = DATEADD(HOUR, CAST(SUBSTRING(@StringDate, 9, 2) AS INT), @RESULT)
SELECT @RESULT = DATEADD(MINUTE, CAST(SUBSTRING(@StringDate, 11, 2) AS INT), @RESULT)
SELECT @RESULT = DATEADD(SECOND, CAST(SUBSTRING(@StringDate, 13, 2) AS INT), @RESULT)

RETURN (@RESULT)
END

The conversion could be done in one SELECT statement, but I think it's better to separate each step of adding hours, minutes, seconds so it's clearer code and easier to maintain. 转换可以在一个SELECT语句中完成,但是我认为最好将每个小时,几分钟,几秒钟的步骤分开,这样可以使代码更清晰并且易于维护。

Then, just call the function from your table, like: 然后,只需从表中调用该函数,例如:

SELECT CONVERT_DATETIME_STRING_TO_DATE(t_time)
FROM myTable

Update: 更新:

If you have access only to do SELECT statements, then use something like this: 如果您仅具有执行SELECT语句的权限,请使用以下命令:

SELECT DATEADD(SECOND, CAST(SUBSTRING(t_time, 13, 2) AS INT), DATEADD(MINUTE, CAST(SUBSTRING(t_time, 11, 2) AS INT), DATEADD(HOUR, CAST(SUBSTRING(t_time, 9, 2) AS INT), CONVERT(DATETIME, substring(t_time, 0, 9)))))
FROM TABLE

Try this . 尝试这个 。

DECLARE @s AS VARCHAR(14)
DECLARE @dt AS DATETIME

SET @s = '20140314163955'
SET @dt = CAST(SUBSTRING(@s, 1,8) as datetime)

SELECT DATEADD(Second, 
               CAST(Substring(@s, 13,2) AS INT) ,
               DATEADD(minute,
                       CAST(Substring(@s, 11,2) AS INT) ,
                       DATEADD(hour, 
                               CAST(Substring(@s, 9,2) AS INT), 
                               @dt))) AS [DateTime]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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