Sql 如何向具有索引值的datetime字段添加时间?

Sql 如何向具有索引值的datetime字段添加时间?,sql,tsql,datetime,time,sql-update,Sql,Tsql,Datetime,Time,Sql Update,如何向具有索引值的datetime字段添加时间 我的RDBMS是SQL Server 2008 R2 我想在中午开始一个datetime字段,对于每个记录,取中午的基值,加上15秒,并为记录设置它 范例 Record 1: DateTime Value = '12:00:00 pm' Record 2: DateTime Value = '12:00:15 pm' Record 3: DateTime Value = '12:00:30 pm' ...n... 我玩弄了一个更新查询,但我无法将

如何向具有索引值的
datetime
字段添加时间

我的RDBMS是SQL Server 2008 R2

我想在中午开始一个
datetime
字段,对于每个记录,取中午的基值,加上15秒,并为记录设置它

范例

Record 1: DateTime Value = '12:00:00 pm'
Record 2: DateTime Value = '12:00:15 pm'
Record 3: DateTime Value = '12:00:30 pm'
...n...
我玩弄了一个更新查询,但我无法将其编入索引。我觉得这可能需要一个函数,但我不确定

想法

恭敬地


Ray查看DATEADD函数,这可能会对您有所帮助

使用递归CTE(公共表表达式),您可以非常轻松地执行此操作:

;WITH DateTimes AS
(
    SELECT 
        CAST('2011-05-18T12:00:00pm' AS DATETIME) AS YourTime,
        1 AS RowNum

    UNION ALL

    SELECT
        DATEADD(SECOND, 15, dt.YourTime),
        dt.RowNum + 1
    FROM
        DateTimes dt
    WHERE   
        dt.RowNum < 50
)
SELECT *
FROM DateTimes
因此,如果您有一个
DATETIME
值,它没有这样的时间:

DECLARE @Today DATETIME 
SET @Today = CAST(GETDATE() AS DATE)

SELECT @Today   -- gives: 2011-05-18 00:00:00.000
您可以轻松地从递归CTE向其添加时间值(您甚至可以调整它,使其仅返回
time
,并将其添加到
DATETIME
列中):


假设您有一个带有
datetime
Value
的表
YourTable
,您需要为每行填充一个递增15秒的datetime值。这里我使用一个列ID来指定行的顺序

declare @Start datetime = '2011-05-18T12:00:00'

;with cte as
(
  select Value,
    row_number() over(order by ID) as rn
  from YourTable 
)
update cte set
  Value = dateadd(s, 15*(rn-1), @Start)

这绝对是完美的。干净、清晰、优雅。帽尖
SELECT  
    CAST(YourTime AS TIME),
    @Today + CAST(YourTime AS TIME) AS 'NewValue'
FROM TimeValues
declare @Start datetime = '2011-05-18T12:00:00'

;with cte as
(
  select Value,
    row_number() over(order by ID) as rn
  from YourTable 
)
update cte set
  Value = dateadd(s, 15*(rn-1), @Start)