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

基于Name字段字母排序递增更新SQL Server 2019的DateTime列

SQL Server 2019 按Name排序递增更新Created字段时间

需求:现有表包含varchar类型的Name字段和datetime类型的Created字段,需按Name字母升序排序,从指定起始时间(或当前时间)开始,依次递增更新Created字段的时间值。

示例原表

Id    Name    Created
1     FMI     2023-03-01 12:01:16
2     MMT     2023-03-22 15:45:31
3     TPH     2023-08-10 10:10:19
4     TPA     2023-08-10 10:12:01
5     SMA     2023-09-07 09:51:13
6     NUA     2023-09-13 17:11:05

期望输出

Id    Name    Created
1     FMI     2024-02-06 15:14:42
2     MMT     2024-02-06 15:14:43
6     NUA     2024-02-06 15:14:44
5     SMA     2024-02-06 15:14:45
4     TPA     2024-02-06 15:14:46
3     TPH     2024-02-06 15:14:47

解决方案

使用SQL Server的**CTE(公共表表达式)**结合窗口函数ROW_NUMBER()实现排序,再通过DATEADD()递增时间:

-- 替换YourTableName为实际表名
WITH SortedRecords AS (
    SELECT 
        Id,
        Created,
        -- 按Name升序分配行号
        ROW_NUMBER() OVER (ORDER BY Name ASC) AS RowNum
    FROM YourTableName
)
UPDATE SortedRecords
-- 以当前时间为基准,每条记录递增1秒(可调整间隔)
SET Created = DATEADD(SECOND, RowNum - 1, GETDATE())

说明

  1. 排序逻辑:ROW_NUMBER() OVER (ORDER BY Name ASC) 按Name字母顺序给每条记录分配连续行号,行号从1开始。
  2. 时间递增:DATEADD(SECOND, RowNum - 1, GETDATE()) 中:
    • GETDATE() 取当前系统时间作为起始时间,若需固定起始时间,替换为指定datetime值(如'2024-02-06 15:14:42')。
    • RowNum - 1 确保第一条记录使用起始时间,后续每条比前一条多1秒;若需其他间隔(如5秒),改为(RowNum - 1) * 5即可。
  3. 执行注意:执行前建议先通过SELECT验证CTE的排序结果,避免误更新:
    SELECT * FROM SortedRecords ORDER BY RowNum
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 19:16:21