sql在第二时间添加顺序

时间:2016-02-26 02:50:55

标签: sql-server

我有一个数据库,其中包含退回产品的测试数据。 Test_Time是一个显示日期,小时和分钟的字符串。我想更新数据库以包含秒,以便我可以按时间顺序显示结果。我运行了一个查询来按顺序放置记录(ORDER BY SN,RMA_NUM,Test_Time,ID)

结果:

ID      SN       RMA_NUM     Test_Time       FAULT_TYPE
3119    CACA014  FH76085254  10/29/2015 08:27   A1
3120    CACA014  FH76085254  10/29/2015 08:27   B8
8923    CACA042  FH83872608  02/08/2016 09:11   A2
8924    CACA042  FH83872608  02/08/2016 09:14   B3
8925    CACA042  FH83872608  02/08/2016 09:14   B6
1651    CADA091  FH67974034  09/18/2015 09:30   A4
1652    CADA091  FH67974034  09/18/2015 09:30   A4
5267    CADA091  FH76347276  11/17/2015 12:31   A9
5268    CADA091  FH76347276  11/17/2015 12:31   C1

如何编写SQL来更新Test_Time以包含唯一的第二个?

所以我的结果会是这样的:

ID      SN       RMA_NUM     Test_Time             FAULT_TYPE
3119    CACA014  FH76085254  10/29/2015 08:27:01      A1
3120    CACA014  FH76085254  10/29/2015 08:27:02      B8
8923    CACA042  FH83872608  02/08/2016 09:11:01      A2
8924    CACA042  FH83872608  02/08/2016 09:14:02      B3
8925    CACA042  FH83872608  02/08/2016 09:14:03      B6
1651    CADA091  FH67974034  09/18/2015 09:30:01      A4
1652    CADA091  FH67974034  09/18/2015 09:30:02      A4
5267    CADA091  FH76347276  11/17/2015 12:31:01      A9
5268    CADA091  FH76347276  11/17/2015 12:31:02      C1

1 个答案:

答案 0 :(得分:1)

您可以使用row_number()

执行此操作
select t.*,
       (test_time + ':' +
        right('00' + cast(row_number() over (partition by sn order by id) as varchar(255)), 2)
       ) as new_test_time
from t;

但我建议您将日期/时间存储为datetime

编辑:

您可以将其用于更新:

with toupdate as (
      select t.*,
             (test_time + ':' +
              right('00' + cast(row_number() over (partition by sn order by id) as varchar(255)), 2)
             ) as new_test_time
      from t
     )
update toupdate
    set test_time = new_test_time;