You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用GETUTCDATE()与DATEADD生成递增时间失败,所有记录时间相同

问题分析与解决

问题原因

你当前的代码中,每次计算@RecordedTime时,都是基于固定不变的@RecordedTimeConstant加上10秒,而非在上一次生成的时间戳基础上累加。这导致所有记录的时间戳都是同一个值(初始时间+10秒),无法实现递增效果。

修正后的代码

表结构(保持不变)

CREATE TABLE mytable (
    sensor_values int,
    recorded_time datetime
);

生成模拟数据的SQL

DECLARE @Counter INT 
DECLARE @RecordedTime DATETIME 
DECLARE @RecordedTimeConstant DATETIME 

-- 初始化基准时间
SET @RecordedTimeConstant = GETUTCDATE() 
SET @Counter = 1
-- 初始化当前时间为基准时间
SET @RecordedTime = @RecordedTimeConstant

/* 生成1000条温度数据,时间戳每次递增10秒 */
WHILE (@Counter <= 1000)
BEGIN
    INSERT INTO [dbo].[mytable] ([sensor_values],[recorded_time])
    VALUES (CAST(RAND()*(25-20)+20 AS INT), @RecordedTime)
    -- 累加10秒,用于下一条记录
    SET @RecordedTime = DATEADD(SECOND, 10, @RecordedTime)
    SET @Counter = @Counter + 1
END

-- 重置计数器和时间,生成与温度数据时间戳匹配的湿度数据
SET @Counter = 1
SET @RecordedTime = @RecordedTimeConstant

/* 生成1000条湿度数据,时间戳与温度数据一一对应 */
WHILE (@Counter <= 1000)
BEGIN
    INSERT INTO [dbo].[mytable] ([sensor_values],[recorded_time])
    VALUES (CAST(RAND()*(42-38)+38 AS INT), @RecordedTime)
    -- 同样累加10秒
    SET @RecordedTime = DATEADD(SECOND, 10, @RecordedTime)
    SET @Counter = @Counter + 1
END

关键修改点

  • 将@RecordedTime初始化为基准时间,而非每次从固定常量计算
  • 每次循环插入后,对@RecordedTime进行10秒累加,确保下一条记录时间戳递增
  • 生成湿度数据时重置@RecordedTime为基准时间,保证湿度与温度数据的时间戳一一匹配
  • 新增CAST(...) AS INT转换,因为sensor_values是int类型,原代码直接生成的小数会导致插入失败

内容的提问来源于stack exchange,提问作者user14736700

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 12:40:04