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