2

我有下表:

在此处输入图像描述

如您所见,我复制了日期和时间值,例如 2012-01-01 09:29:00.000 和 2012-01-01 09:29:00.008。

我需要您的帮助,通过在重复的小时数上添加毫秒来消除冗余并获得以下结果:

在此处输入图像描述

所以我创建了一个表 TableSource 并尝试在没有 redondonce 的情况下插入新的输出值但我没有成功。

我认为以下查询可以解决问题,但它仅适用于 My-sql :

INSERT INTO TableDestination
SELECT * FROM TableSource
    ON DUPLICATE KEY
UPDATE  NeededDateRow = DATEADD(millisecond,1 , NeededDateRow)
4

2 回答 2

1

你可以使用这个:

    DECLARE @table table (id int, dt datetime)
DECLARE @table2 table (id int, dt datetime)
INSERT INTO @table 
SELECT 1, '2012/01/01'
UNION
SELECT 2, '2012/01/01'
UNION
SELECT 3, '2012/01/01'
UNION
SELECT 1, '2012/01/02'

SELECT * , DATEADD(millisecond, 10 * (ROW_NUMBER() OVER (PARTITION BY dt ORDER BY dt) - 1), dt) As NewDate
FROM @table 

INSERT INTO @table2
SELECT ID, DATEADD(millisecond, 10 * (ROW_NUMBER() OVER (PARTITION BY dt ORDER BY dt) - 1)  , dt) FROM @table 

SELECT * from @table2 
于 2012-07-26T15:00:01.300 回答
0

MSSQL中没有等效INSERT ... ON DUPLICATE的 KEY,但是, MERGEWHEN NOT MATCHED可能对您有用。

你可以参考这个答案

我只是起草了 sql 语法(未经测试)

MERGE TableDestination AS T
USING TableSource AS S
ON (T.NeededDateRow = S.NeededDateRow)
WHEN NOT MATCHED
    THEN INSERT (NeededDateRow) VALUES (DateAdd(millisecond,1,NeededDateRow))
于 2012-07-26T14:55:27.907 回答