关于数据库修改数据的。

SQL SERVER数据库,现在有一张表,暂且认为是表A。表A中有一个时间字段。这个字段里存了从12年-17年的数据。每个小时有12条数据。但是现在每个小时的数据不是整分来的。
就比如说,它可能是第3分钟,第7分钟,第12分钟,第15分钟来的。现在要修改这些时间
数据。一个小时之内,第一条数据修改为0分,第二条数据修改为10分,第三条数据修改
为15分。请大家帮助!

1个回答

-- 测试数据
CREATE TABLE #T(id int identity, dt datetime)

INSERT INTO #T(dt) VALUES('2017-03-09 11:08')
INSERT INTO #T(dt) VALUES('2017-03-09 11:29')
INSERT INTO #T(dt) VALUES('2017-03-09 12:03')
INSERT INTO #T(dt) VALUES('2017-03-09 12:07')
INSERT INTO #T(dt) VALUES('2017-03-09 12:12')
INSERT INTO #T(dt) VALUES('2017-03-09 12:15')

-- 更新语句
;WITH U(id,hours,minutes) AS (
    SELECT id,
           DATEDIFF(hour,'2012-01-01',dt),
           (ROW_NUMBER() OVER(PARTITION BY DATEDIFF(hour,'2012-01-01',dt)
                              ORDER BY dt) - 1) * 10
      FROM #t
    /* 一次只处理一个月数据
     WHERE dt ...
     */
)
UPDATE #T
   SET dt = DATEADD(minute,
                    u.minutes,
                    DATEADD(hour, u.hours, '2012-01-01'))
  FROM #t
  JOIN u
    ON #t.id = u.id

-- 查看结果
SELECT * FROM #t
         id dt
----------- -----------------------
          1 2017-03-09 11:00:00.000
          2 2017-03-09 11:10:00.000
          3 2017-03-09 12:00:00.000
          4 2017-03-09 12:10:00.000
          5 2017-03-09 12:20:00.000
          6 2017-03-09 12:30:00.000
abcd614110294
假装努力的傻子 恩恩 我刚才查了一下。是我孤陋寡闻了。我按照你的方法 ,一次处理一个月的话 不太妥当,因为从12年到16年的数据都在一起的。不好一个月一个月区分出来的。
接近 3 年之前 回复
abcd614110294
假装努力的傻子 with 看不太明白
接近 3 年之前 回复
abcd614110294
假装努力的傻子 更新语句那里 为什么一开始有个;号。 wite u这块看不太明白。能否说的再仔细一点
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问