1

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

date 和 type 是表中的列名。

表中的数据如下所示

date        time
20090610    132713
20090610    132734

我需要 ms sql server 查询来连接这 2 列数据并显示为日期时间格式。

注意:1.这2列的数据类型现在不能改变。2.我试过

select convert(datetime,date + time)

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

提出可能的解决方案。

4

4 回答 4

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
于 2012-12-20T08:26:05.967 回答
0

你可以使用它

SELECT 
convert(varchar, convert(datetime, date), 111)
+ ' ' + substring(time, 1, 2)
+ ':' + substring(time, 3, 2)
+ ':' + substring(time, 5, 2)
于 2012-12-20T07:58:30.043 回答
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
于 2012-12-20T08:44:08.097 回答
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 的问题。因此,您仍然需要在使用此功能之前转换这些数据项。

于 2012-12-20T09:00:44.720 回答