我在varchar数据类型的表中有2列。
日期和类型是表格中的列名。
表中的数据如下所示
date time
20090610 132713
20090610 132734
我需要ms sql server查询来连接这两列数据并显示为datetime格式。
注意: 1.现在无法更改这两列的数据类型。 我试过了
select convert(datetime,date + time)
它说“从字符串转换日期和/或时间时转换失败。”
建议可能的解决方案。
答案 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的问题。因此,在使用此功能之前,您仍需要转换这些数据项。