將今年初的日期時間欄位的資料改成去年底日期時間,並維持資料原本日期時間的順序
今天同事想要將2014年1月多的日期時間欄位的資料改成2013年底的日期時間資料,並保持資料的原本日期時間的順序不變,如下,
orgdt
-----------------------
2014-01-09 13:54:32.290
2014-01-09 13:54:32.290
2014-01-13 10:53:55.990
2014-01-13 10:53:56.007
改成類似如下的結果
newdt
-----------------------
2013-12-31 08:00:01
2013-12-31 08:00:02
2013-12-31 08:00:03
2013-12-31 08:00:04
所以看起來是某個日期時間再加上序號即可,如下,
--SQL 2005 之後可使用CTE
WITH org_data_sn
AS (
SELECT ROW_NUMBER() OVER ( ORDER BY orgdt ) AS sn ,
orgdt
FROM #org_data
)
SELECT * ,
DATEADD(second, sn, '2013/12/31 08:00') AS newdt
FROM org_data_sn
--SQL 2K 使用temp table來處理
--1.透過identity欄位來產生序號
CREATE TABLE #tmp_data
(
orgdt DATETIME
, sn INT IDENTITY(1,1)
);
--2.將原始資料排序後存入temp table之中
INSERT INTO #tmp_data (orgdt)
SELECT orgdt
FROM #org_data
ORDER BY orgdt;
--3.新欄位的值就是舊日期時間再加上序號即可
SELECT * ,
DATEADD(second, sn, '2013/12/31 08:00') AS newdt
FROM #tmp_data
--有了這樣的資料,就可以跟原本的資料表,依舊的日期時間來Join,然後Update成新的日期時間
--UPDATE A
--SET orgdt = newdt
--FROM MyFakeTable A, #tmp_data B
--WHERE A.orgdt = B.orgdt
--清除資料
DROP TABLE #tmp_data;
DROP TABLE #org_data;
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^