2016-02-26 213 views
0

我有一个数据库,它包含返回产品的测试数据。 Test_Time是一个显示日期,小时和分钟的字符串。我想更新数据库以包含秒数,以便按时间顺序显示结果。我跑到一个查询把记录顺序(ORDER BY SN,RMA_NUM,Test_Time,ID)sql第二次添加时间

结果:

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

可以使用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; 
+0

真棒,查询工作......谢谢你,戈登。如何结合UPDATE语句来更新Test_Time字段? –

+0

完美...再次感谢! –