[英]Varchar to Datetime conversion - SQL Server
如何将varchar列转换为datetime字段。 varchar字段具有以下格式的日期和时间
t_time
-------
20140314163955
以下不起作用
CAST(t_time AS datetime)
提前致谢。
为了保持整洁,一种选择是使用一种功能,例如下面的一种:
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
转换可以在一个SELECT
语句中完成,但是我认为最好将每个小时,几分钟,几秒钟的步骤分开,这样可以使代码更清晰并且易于维护。
然后,只需从表中调用该函数,例如:
SELECT CONVERT_DATETIME_STRING_TO_DATE(t_time)
FROM myTable
更新:
如果您仅具有执行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
尝试这个 。
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.