Как добавить время в поле datetime со значением индексации? - PullRequest
1 голос
/ 18 мая 2011

Как добавить время в поле datetime со значением индексации?

Моя СУБД - это 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

Ответы [ 3 ]

2 голосов
/ 18 мая 2011

Предполагая, что у вас есть таблица YourTable с datetime столбцом Value, которую необходимо заполнить значением даты и времени, увеличенным на 15 секунд для каждой строки.Здесь я использую идентификатор столбца, чтобы указать порядок строк.

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 голос
/ 18 мая 2011

С рекурсивным CTE (Common Table Expression) вы можете сделать это довольно легко:

;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
0 голосов
/ 18 мая 2011

Посмотрите на функцию DATEADD, и это может вам помочь.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...