我相信以下内容会满足您的要求,即使用随机生成的时间更新 1000 个现有行的时间列,格式为 hh:mm:ss :-
WITH RECURSIVE newdata(id_of_row,newtime) AS (
SELECT rowid AS id_of_row ,
time(strftime('%s', '2000-01-01 00:00:00') +
abs(random() % (strftime('%s', '2000-01-31 23:59:59') -
strftime('%s', '2000-01-01 00:00:00'))
),
'unixepoch') AS dt
FROM acsl_details
)
UPDATE acsl_details
SET time = (
SELECT newdata.newtime
FROM newdata
WHERE newdata.id_of_row = acsl_details.rowid
);
核心代码/SQL 是:-
SELECT rowid AS id_of_row ,
time(strftime('%s', '2000-01-01 00:00:00') +
abs(random() % (strftime('%s', '2000-01-31 23:59:59') -
strftime('%s', '2000-01-01 00:00:00'))
),
'unixepoch') AS dt
FROM acsl_details
这会从表中提取 rowid,并添加随机生成的时间,从而为 acsl_details 表的每一行生成两列(id_of_row 和 dt)。
这个,即 newdata 然后驱动更新。正在对 newdata 中存在的每一行进行更新。
测试
以下内容用于创建 100 个相同的行:-
DROP TABLE IF EXISTS acsl_details;
CREATE TABLE IF NOT EXISTS acsl_details (userID integer, aadhar_no INTEGER, date INTEGER, time INTEGER, in_out INTEGER, deptid INTEGER, compy_code INTEGER, empmode INTEGER, name TEXT, upload_flag INTEGER, main_compcode TEXT, utc_date INTEGER, utc_time, time_zone, latitude REAL, longitude REAL);
WITH RECURSIVE counter(userid,aadhar,date,time,in_out,deptid,compy_code,empmode,name,upload_flag,main_compcode,utc_date,utc_time,time_zone,latitude,longitude) AS (
SELECT 1,11,'2018-01-01','10:20:00',0,111,56078,25,'FRED',4,'PARTIAL',5000,1324,'Z',123.56,56.234
UNION ALL SELECT userid,aadhar,date,time,in_out,deptid,compy_code,empmode,name,upload_flag,main_compcode,utc_date,utc_time,time_zone,latitude,longitude FROM counter LIMIT 100)
INSERT INTO acsl_details SELECT * FROM counter;
SELECT * FROM acsl_details;
例如:-
按照解决方案运行代码后:-