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

SQLite表插入随机值异常:年龄与注册日期数值异常问题排查

问题排查与解决

问题原因

  1. Age字段出现极端值:SQLite的RANDOM()返回64位有符号整数,范围是 -9223372036854775808 到 9223372036854775807。直接用RANDOM() * 10会产生远超预期的极大/极小值,即使经过ROUND处理也无法得到18-28之间的合理年龄。
  2. RegistrationDate字段为空:当RANDOM()返回负数时,拼接后的日期表达式会变成DATE('now', '-(-xxx) days'),这种格式不符合SQLite日期函数的语法规则,最终返回NULL。

修正后的插入语句

WITH RECURSIVE
  cnt(x) AS (
     SELECT 1
     UNION ALL
     SELECT x+1 FROM cnt
     WHERE x < 1000
  )
INSERT INTO Students (FirstName, LastName, Gender, Age, RegistrationDate)
SELECT
    'FirstName' || x,
    'LastName' || x,
    CASE WHEN x % 3 = 0 THEN 'Male' WHEN x % 3 = 1 THEN 'Female' ELSE 'Other' END,
    -- 生成18-28之间的整数年龄
    18 + CAST(ABS(RANDOM()) % 11 AS INTEGER),
    -- 生成过去一年以内的随机有效日期
    DATE('now', '-' || (ABS(RANDOM()) % 366) || ' days')
FROM cnt;

关键修改说明

  • Age字段优化:用ABS(RANDOM()) % 11生成0-10的整数,加上18后精准得到18-28的合理年龄,彻底避免了原写法的数值溢出问题。
  • RegistrationDate字段修复:通过ABS(RANDOM()) % 366生成0-365的非负整数,拼接出合法的日期偏移参数,确保SQLite的DATE函数能正确解析并返回有效日期。

验证效果

执行修正后的语句后,查询Students表会得到符合预期的结果示例:

1|FirstName1|LastName1|Female|22|2023-10-15
2|FirstName2|LastName2|Other|19|2024-01-03
3|FirstName3|LastName3|Male|28|2023-08-22

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:17:24