我有一个表有一个名为[平均回答时间]的日期时间字段。对于某些记录,时间显示不正确,如下所示:
1899-12-30 01:04:00.000
1899-12-30 01:05:00.000
1899-12-30 01:30:00.000
这里显示的时间是错误的。上面显示的时间是小样本,但它们需要在几分钟而不是几小时和几分钟内格式化
有没有办法用SQL脚本来解决这个问题,因为替代方案涉及再次提取数据,这将非常困难和耗时。
答案 0 :(得分:1)
您可以使用DATEPART:
返回一个整数,表示指定日期的指定日期部分。
结合DATEADD:
返回指定的日期,并将指定的数字间隔(有符号整数)添加到该日期的指定日期部分。
示例:强>
DECLARE @val AS DATETIME = '1899-12-30 01:30:00.000';
SELECT @val; -- 1899-12-30 01:30:00.000
SET @val = DATEADD(SECOND, DATEPART(MINUTE, @val),
DATEADD(MINUTE, ( DATEPART(HOUR, @val) ),
CAST(CAST(@val AS DATE) AS DATETIME)));
SELECT @val; -- 1899-12-30 00:01:30.000
这会将值转换为date
,以剥离时间部分并返回datetime
以将时间设置为00:00:00
。然后根据小时值和基于分钟值的秒数添加分钟。
您可以将此选项与UPDATE
语句一起使用,但请确保使用WHERE
子句以避免更新所有内容,除非这是您的意图。
示例更新查询:
CREATE TABLE #temp
(
AvgTimeToAnswer DATETIME
);
INSERT INTO #temp
( AvgTimeToAnswer )
VALUES ( '1899-12-30 01:30:00.000' );
SELECT *
FROM #temp; -- 1899-12-30 01:30:00.000
UPDATE #temp
SET AvgTimeToAnswer = DATEADD(SECOND, DATEPART(MINUTE, AvgTimeToAnswer),
DATEADD(MINUTE,
( DATEPART(HOUR, AvgTimeToAnswer) ),
CAST(CAST(AvgTimeToAnswer AS DATE) AS DATETIME)));
-- WHERE some condition
SELECT *
FROM #temp; -- 1899-12-30 00:01:30.000
DROP TABLE #temp;