我有一个数据库,其中包含退回产品的测试数据。 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
答案 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;