如何将DATETIME和SECOND 用SQL命令合并成一个TimeStamp ?

我想将数据中的两列类型分别为DATETIME和SECOND 的时间数据合并成一个TimeStamp,数据示例如下:

ActionDay	        minute
2023.01.31T18:47:20	00:00:05
2023.01.31T18:47:20	00:00:05
2023.01.31T18:47:20	00:00:01
2023.01.31T18:47:20	00:00:01
2023.01.31T18:47:20	00:00:06

请问有什么sql命令可以完成这个任务吗

请先 登录 后评论

1 个回答

levenew

有四种方法:

1. 将 second 数据转为int类型与 DateTime数据直接相加:

select ActionDay + minute.int() from T

2. 将Datetime与Second直接相加,再转为DateTime

类型转换有两种方法,datetime()和cast(, datetime):

select datetime(ActionDay+minute)  from T
select cast(ActionDay+minute, DATETIME) as dt from T

3. 使用concatDateTime()方法将DateTime数据的日期部分与Second进行连接:

select concatDateTime(date(ActionDay),minute) from T


在本地进行测试,分别使用上述方法在一个1千万行记录的内存表上进行合并操作:

n=10000000
T = table(take(2023.01.10T00:00:00 2023.01.10T00:00:00,n) as `ActionDay, take(15:00:00 15:19:00 ,n) as `minute);
timer select cast(ActionDay+minute, DATETIME) as dt from T
timer select concatDateTime(date(ActionDay),minute) from T
timer select ActionDay + minute.int() from T
timer select datetime(ActionDay+minute)  from T

测试结果如下:

Time elapsed: 19.946 ms

Time elapsed: 16.956 ms

Time elapsed: 10.971 ms

Time elapsed: 9.973 ms

可以看到,ActionDay + minute.int()与datetime(ActionDay+minute)两种方法的速度相对较快,分别为9.973毫秒与10.971毫秒。

请先 登录 后评论