簡體   English   中英

如何為帶有索引值的日期時間字段添加時間?

[英]How do I add time to a datetime field with an indexing value?

如何為帶有索引值的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查詢,但無法將它編入索引。 我感覺這可能需要一個功能,但不確定。

想法?

尊敬,

射線

假設你有一個表YourTabledatetimeValue ,您需要填寫由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)

使用遞歸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列使用的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

查看DATEADD函數,這可能會對您有所幫助。

http://msdn.microsoft.com/en-us/library/ms186819.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM