场景
突然老大一封邮件,打乱了原来的计划。做个小功能,把原来某一段时间的日志copy到另外一个时间段。
想法
我的天,这东西,要开发?欲哭无泪【他丫的现场一个Excel一个企业管理器,复制出来,改改,仍进去不就完了】
好吧,想了想如果做个java小demo,要读配置文件,加载数据库驱动…,好烦啊。想起来数据库自己的拷贝,insert into … select 和select … into,窃喜。说白了就一句SQL。
唉,这数据库是要装地,跑不了了,SQL server2008,先查了一下是否支持这种语法, 一查固然可以。美滋滋。下面就是时间段设定了。咋整哩,数据库临时变量。存储过程都不用写了,反正我也不会-
最后还要时间转换。好苦逼,本来一句话硬生生写成了还是一句话,巨长的,下面之间看语句
-- 定义临时变量
DECLARE
@start_a datetime,
@end_a datetime,
@start_b datetime,
@end_b datetime,
@addf FLOAT
-- 查询时间段
SET @start_a = '2019-07-01'
SET @end_a = '2019-09-09'
-- 插入时间段
SET @start_b = '2020-02-01'
SET @end_b = '2022-09-01'
-- 计算增幅
SET @addf = CAST( ( DATEDIFF( S, '1970-01-01 08:00:00', @end_b ) - DATEDIFF( S, '1970-01-01 08:00:00', @start_b ) ) AS FLOAT ) / ( DATEDIFF( S, '1970-01-01 08:00:00', @end_a ) - DATEDIFF( S, '1970-01-01 08:00:00', @start_a ) ) INSERT INTO TB_LOG SELECT
DATEADD (
S,
CAST( ( DATEDIFF( S, '1970-01-01 08:00:00', LOG_TIME ) - DATEDIFF( S, '1970-01-01 08:00:00', @start_a ) ) * @addf AS INT ) + DATEDIFF( S, '1970-01-01 08:00:00', @start_b ),
'1970-01-01 08:00:00'
) AS LOG_TIME,RESULT,URL_NAME,USER_ID,USER_NAME,REASON
FROM
TB_LOG
WHERE
LOG_TIME -- 查询时间段
BETWEEN @start_a
AND @end_a;
因为使用临时变量,所以中间不能加分号。哈哈哈,结束