使用递归 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