2015-08-13 6 views
0

В нашем регистраторе данных записаны некоторые необрабатываемые данные.
Регистратор регистрирует 10 минут средних значений.
Из-за ошибки фабриканта устройства он записал некоторые временные метки со значениями прыжковых минутных нравится следующим
Обновить дату-время timestamp минутное значение

plantid         Value    Timestamp 
1F617EDE-7B11-416A-B8D1-FDD566020E13 1.10000002384186 2013-10-26 06:02:00.000 
1F617EDE-7B11-416A-B8D1-FDD566020E13 0.800000011920929 2013-10-26 08:56:00.000 

Как вы можете видеть, в первой записи есть 02 и во второй 56 минут. Я должен исправить эти значения до 0 (в строке 1) и до 50 дюймов во второй строке, чтобы сделать данные доступными для дальнейшей обработки и анализа. Итак, 10-минутные значения.

Я попытался как следующий

DECLARE @ttest DATETIME = '2013-10-26 08:56:00.000' 
SELECT @ttest 
SET @ttest = Dateadd(minute,-DATEPART(MINUTE, @ttest),@ttest) 
SELECT @ttest 

, но результат будет 2013-10-26 08: 00: 00,000 потому что я вычисляю минус 56, но мне нужно было рассчитать минус 6

Так как можно вычесть только одну минуту значение 6 вместо 56

ответ

2

Вы можете использовать modulo%10, чтобы получить единственную цифру значение минут:

Dateadd(minute, -DATEPART(MINUTE, @ttest) % 10, @ttest) 

Modulo возвращает остаток от деления, так и в случае 56% 10 остальное будет 6.

Если вам нужно удалить вторые/миллисекунды/наносекунды тоже один из способов будут цепь несколько DATEADD операций, хотя я подозреваю, что может быть лучший способ.

+0

безупречный, спасибо. это работает – veritaS

+0

Что делать, если метка времени содержит также секунды и миллисекунды? Кажется, что OP хочет урезать остальных. –

+0

@TimSchmelter Тогда миллисекунды, или секунды в этом случае, будут сохранены и должны быть усечены; возможно, преобразование datetime в float и выполнение арифметики было бы лучше. OP только говорит о прыгающих минутах, хотя, возможно, это не проблема в данном конкретном случае. – jpw

 Смежные вопросы

  • Нет связанных вопросов^_^