合并2个varchar列的数据并转换为datetime

时间:2012-12-20 07:16:17

标签: sql sql-server sql-server-2008 tsql sql-server-2005

我在varchar数据类型的表中有2列。

日期和类型是表格中的列名。

表中的数据如下所示

date        time
20090610    132713
20090610    132734

我需要ms sql server查询来连接这两列数据并显示为datetime格式。

注意: 1.现在无法更改这两列的数据类型。 我试过了

select convert(datetime,date + time)

它说“从字符串转换日期和/或时间时转换失败。”

建议可能的解决方案。

4 个答案:

答案 0 :(得分:2)

这将返回日期时间。底线将由您的表格替换

select convert(datetime,date,112)+
coalesce(stuff(stuff(rtrim(time), 5,0,':'), 3,0,':'), '') newdate
from 
(VALUES ('20090610','132713'),('20090610', '132734'),('20090610', '      ')) yourtable(date,time)

结果:

newdate
2009-06-10 13:27:13.000
2009-06-10 13:27:34.000
2009-06-10 00:00:00.000

答案 1 :(得分:0)

您可以使用

获取它
SELECT 
convert(varchar, convert(datetime, date), 111)
+ ' ' + substring(time, 1, 2)
+ ':' + substring(time, 3, 2)
+ ':' + substring(time, 5, 2)

答案 2 :(得分:0)

CREATE TABLE #Table 
(
[date] VARCHAR(100),
[time] VARCHAR(100)
)
INSERT INTO #Table VALUES
('20090610','132713'),
('20090610','132734')   

;WITH Bits_CTE
    AS
    (
    SELECT 
        [Date],
        [Time],
        [hrs] = CONVERT(INT,SUBSTRING([Time], 1, 2)),
        [mns] = CONVERT(INT,SUBSTRING([Time], 3, 2)),
        [secs] = CONVERT(INT,SUBSTRING([Time], 5, 2))
    FROM #Table
    )
SELECT 
    [Date],
    [Time],
    DATEADD(HOUR,[hrs],
    DATEADD(MINUTE,[mns],
    DATEADD(SECOND,[secs],[Date]))) 
FROM Bits_CTE

答案 3 :(得分:0)

CREATE FUNCTION [dbo].[DateTimeAdd] 
( 
      @datepart         date, 
      @timepart         time 
) 
RETURNS datetime2 
AS 
BEGIN 
      RETURN DATEADD(dd, DATEDIFF(dd, 0, @datepart), CAST(@timepart AS datetime2)); 
END

抱歉 - 错过了关于将日期和时间存储为varchars的问题。因此,在使用此功能之前,您仍需要转换这些数据项。