我有下表:
如您所见,我有重复的日期和时间值,如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)
答案 0 :(得分: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
答案 1 :(得分:0)
MSSQL中没有等效的INSERT ... ON DUPLICATE
KEY,但是,
MERGE 和 WHEN NOT MATCHED 可能适合您。
您可以参考this answer
我刚刚草拟了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))