如何将整数分钟数添加到日期时间组成的Timestamp字段中?
解决Testing表新增timestamp列并计算结束时间的问题
别发愁,这个需求其实很好实现!我来一步步帮你搞定:
1. 填充begintime字段
你提到用timestamp_from_parts()来生成begintime,这个函数在SQL Server里需要传入年、月、日、时、分、秒、毫秒这些参数,我们可以从现有的testdate和testtime字段里提取对应值:
UPDATE Testing SET begintime = timestamp_from_parts( YEAR(testdate), MONTH(testdate), DAY(testdate), DATEPART(HOUR, testtime), DATEPART(MINUTE, testtime), DATEPART(SECOND, testtime), 0 -- 毫秒部分如果不需要可以设为0 );
或者更简便的方式,直接把testdate和testtime拼接成datetime后转成timestamp,效果完全一致:
UPDATE Testing SET begintime = CAST(CAST(testdate AS DATETIME) + CAST(testtime AS DATETIME) AS TIMESTAMP);
2. 计算并填充endtime字段
要得到结束时间,只需要用DATEADD()函数把testminutes分钟加到begintime上就行,这个函数支持直接对timestamp类型进行操作:
UPDATE Testing SET endtime = DATEADD(MINUTE, testminutes, begintime);
如果testminutes可能存在NULL值,建议加上ISNULL()处理,避免endtime变成NULL:
UPDATE Testing SET endtime = DATEADD(MINUTE, ISNULL(testminutes, 0), begintime);
3. 合并成单条更新语句(可选)
如果你想一次性完成两个字段的填充,可以把两个操作合并到一个UPDATE语句里,这样效率更高:
UPDATE Testing SET begintime = CAST(CAST(testdate AS DATETIME) + CAST(testtime AS DATETIME) AS TIMESTAMP), endtime = DATEADD( MINUTE, ISNULL(testminutes, 0), CAST(CAST(testdate AS DATETIME) + CAST(testtime AS DATETIME) AS TIMESTAMP) );
这样就能完美实现你想要的效果啦!
内容的提问来源于stack exchange,提问作者Holt
相关产品推荐
相关产品推荐

