![](/img/trans.png)
[英]How do i show just the time with AM or PM from a field that is a datetime format?
[英]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查詢,但無法將它編入索引。 我感覺這可能需要一個功能,但不確定。
想法?
尊敬,
射線
假設你有一個表YourTable
有datetime
列Value
,您需要填寫由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函數,這可能會對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.