如何使用索引值为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...
我玩弄了UPDATE查询,但我无法将其编入索引。我觉得这可能需要一个功能,但我不确定。
想法?
此致,
雷
答案 0 :(得分:2)
假设您有一个YourTable
列datetime
的表Value
,您需要填充每行增加15秒的日期时间值。这里我使用列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)
答案 1 :(得分:1)
使用递归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
请注意:您需要确保在达到默认的最大递归深度100之前停止递归(这就是我使用RowNum
列的内容) - 否则,SQL Server会告诉您大声并且明确表示它不喜欢这种递归CTE: - )
这会产生一个输出:
YourTime RowNum
2011-05-18 12:00:00.000 1
2011-05-18 12:00:15.000 2
2011-05-18 12:00:30.000 3
2011-05-18 12:00:45.000 4
....
....
2011-05-18 12:12:00.000 49
2011-05-18 12:12:15.000 50
因此,如果您的DATETIME
值没有时间,请执行以下操作:
DECLARE @Today DATETIME
SET @Today = CAST(GETDATE() AS DATE)
SELECT @Today -- gives: 2011-05-18 00:00:00.000
您可以通过递归CTE轻松地为其添加时间值(您甚至可以将其修改为仅返回TIME
并将其添加到DATETIME
列):
SELECT
CAST(YourTime AS TIME),
@Today + CAST(YourTime AS TIME) AS 'NewValue'
FROM TimeValues
答案 2 :(得分:0)
查看DATEADD函数,这可能会对您有所帮助。