2

私は次の表を持っています:

ここに画像の説明を入力してください

ご覧のとおり、2012-01-01 09:29:00.000と2012-01-01 09:29:00.008のように日付と時刻の値が重複しています。

重複する時間にミリ秒を追加して冗長性を取り除き、次の結果を得るには、あなたの助けが必要です。

ここに画像の説明を入力してください

そこで、テーブルTableSourceを作成し、新しい出力値を冗長化せずに挿入しようとしましたが、成功しませんでした。

次のクエリで問題を解決できると思いますが、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 DUPLICATEKEYはありませんが、 MERGEWHENNOTMATCHEDが機能する場合があります。

あなたはこの答えを参照することができます

そして私は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 に答える